我有以下数据库架构:
用户表存储登录的用户。字段“overridetemplate”是一个布尔值,让我们知道我们是否获得了用户安全模板信息或用户覆盖信息。
user_access表将用户关联到 security_template(如用户角色)。
security_template表具有安全模板信息(例如:高级用户等)
security_template_exception具有其对模板的访问权限的所有操作(例如:访问类型为“FullAccess”的“insert_user”,访问类型为“Deny”的“delete_user”)
因此,这样一个用户就有了一个角色或安全模板,并且该模板有一堆“操作”,该用户的访问类型。
然后,我有一个额外的表user_override_template,它是为覆盖安全模板而创建的,然后您可以将单独的操作权限分配给用户,而不会影响完整的安全模板。
“accesstype”只有 3 种类型:“FullAccess”、“ReadOnly”和“Deny”。
现在,带来安全操作访问权限的查询如下:
SELECT
ste.[objectid], ste.[accesstype]
FROM
[user] AS u
JOIN [users_access] AS ua ON u.[userid] = ua.[userid]
JOIN [security_template] AS st ON ua.[templateid] = st.[templateid]
JOIN [security_templates_exceptions] AS ste ON st.[templateid] = ste.[templateid]
WHERE
su.[userid] = @userid
查询的结果是这样的:
因此,我需要依赖于“覆盖模板”字段,我应该从“user_override_template”或“security_template_exception”获取访问信息。
关于如何在不使用的情况下执行此操作的任何线索(我想在一次选择中执行此操作):
IF @overridetemplate = 1
BEGIN
END
ELSE
BEGIN
END