SQL Server行级安全性 - 多对多

时间:2013-02-03 22:58:08

标签: sql-server-2008 security active-directory row-level-security

我们正在使用SQL Server 2008并在Active Directory(AD)中设置我们的权限。核心表中的每一行只能由有权查看每一行的人查看。我可以在每一行上设置行级安全性(每行包含一个与AD组对齐的角色),但是我有以下问题: -

  • 因为角色代表的国家我有100个角色。此外,我有一些用户可以访问多个角色......并且用户可以访问的几个角色不一致(即存在重叠):因此用户的角色是多对多的关系

就是这种情况(为了实现灵活的模型),我的第一直觉是为每个国家/地区创建一个AD组,然后在数据库角色中创建分组(将每个国家/地区分组)。然而,这将是一个维护开销 - 例如,有许多工作人员可以访问所有组,因此当一个国家上线时,会创建一个新的AD组,这意味着我必须要求将这些用户添加为成员。新的AD组(以及需要将新的全局用户添加到所有组中) - 我宁愿拥有一个可以全面访问的全局组。

有没有人遇到过这类问题。基本上,如果我只有非常精细的AD组,我可以容纳数据库角色级别中的多对多,但是我宁愿例如有粒度AD组(对于那些需要细化权限的用户)以及那些用于那些的全局AD组。需要访问所有行的用户(我只需要添加具有全局访问权限的用户)

2 个答案:

答案 0 :(得分:2)

根据您所描述的内容,如果您要管理大量用户,创建第三方管理工具或使用身份管理工具管理AD组和相应的SQL行级别是一个很好的情况。安全

至于AD组,你所想的也是我会做的,即

  • 基于国家的100个角色
  • 所有国家/地区的1个角色=>包含所有其他AD国家/地区组

创建一个工具(理想情况下,如果你有一个工具,最好是身份管理工具),

  • 工具允许您手动将用户分配到他们的国家/地区
  • 工具将国家/地区映射到相应的AD组(身份管理将开箱即用)
  • 工具将国家/地区映射到相应的SQL行安全性
  • 工具定期将国家/地区与AD组和SQL安全性同步(这是为了防止系统管理员手动将用户组分配给用户,同样身份管理会将其打包开来)

答案 1 :(得分:1)

我最终完成的工作是: -

  • 为每个国家/地区创建一个数据库组(大约100个)
  • 为每个分组创建一个数据库组(GLOBAL,EUROPE,APAC,LATINAMERICA,NORTHAMERICA,UK等)
  • 创建包含所需级别用户的AD组(仅需要12个)
  • 将AD组添加为相应数据库角色的成员
  • 在各个国家/地区和群组之间创建数据库角色父子关系;例如。欧洲的英国(注意许多人可以在这里获得)
  • 为组中的组创建数据库角色父子关系(请注意,此处允许多对多)

一些注意事项: -

  • 此处添加的每个数据库角色都需要是数据库用户
  • 创建数据库角色关系时,所有相关的数据库角色和AD组也会进入关系
  • 现在我可以根据需要在AD组级别或单个国家/地区AD组级别添加用户
  • 数据库角色和任何关系都是脚本化的
  • IS_MEMBER子句位于各个国家/地区级别