当用户在多个 AD 组中时有效的 SQL Server 权限

Phi*_*hil 6 sql-server permissions active-directory

通过 Active Directory 组使用 Window 身份验证,如果 Active Directory 用户存在于两个对数据库具有不同权限的不同 Active Directory 组中,它使用哪个 Active Directory 组来设置权限?

  1. 最严格的
  2. 限制最少
  3. 两者相加
  4. 随机的

在测试环境中设置它被证明是困难的,因为我不是域管理员,而且我们没有测试域。另外,我们已经看到了两种结果。只是想知道是否有人知道答案。

Han*_*non 8

将适用于登录的权限相加,然后按对象从限制最少到限制最多。DENY 的权利优先于 GRANT 的权利。

取自数据库引擎权限MSDN SQL Server 页面

检查权限可能很复杂。权限检查算法包括重叠的组成员身份和所有权链接,包括显式和隐式权限,并且可能受到包含安全实体的安全类的权限的影响。算法的一般过程是收集所有相关权限。如果未找到阻塞 DENY,则算法将搜索提供足够访问权限的 GRANT。该算法包含三个基本要素:安全上下文、权限空间和所需权限。

算法的一般步骤

  • 当算法确定是否允许访问安全对象时,它使用的精确步骤可能会有所不同,具体取决于所涉及的主体和安全对象。但是,该算法执行以下一般步骤:

    1. 如果登录名是 sysadmin 固定服务器角色的成员,或者用户是当前数据库中的 dbo 用户,则绕过权限检查。

    2. 如果所有权链接适用并且对链中较早对象的访问检查通过了安全检查,则允许访问。

    3. 聚合与调用者关联的服务器级、数据库级和签名模块身份以创建安全上下文。

    4. 对于该安全上下文,收集为权限空间授予或拒绝的所有权限。权限可以明确表示为 GRANT、GRANT WITH GRANT 或 DENY;或者权限可以是隐含的或覆盖的权限 GRANT 或 DENY。例如,对架构的 CONTROL 权限意味着对表的 CONTROL。表上的 CONTROL 意味着 SELECT。因此,如果授予对架构的 CONTROL,则授予对表的 SELECT。如果 CONTROL 在表上被拒绝,则表上的 SELECT 被拒绝。

    5. 列级权限的 GRANT 会覆盖对象级别的 DENY。

    6. 确定所需的权限。

    7. 如果对权限空间中对象的安全上下文中的任何身份直接或隐式拒绝所需权限,则权限检查失败。

    8. 如果所需的权限没有被拒绝,并且所需的权限直接或隐式地包含对权限空间中任何对象的安全上下文中的任何身份的 GRANT 或 GRANT WITH GRANT 权限,则通过权限检查。