如何检索Active Directory域组

时间:2016-10-26 15:10:28

标签: sql-server database dns role active-directory-group

我有以下环境:

  • 在Microsoft Windows NT 6.1(7601)上运行的Microsoft SQL Server Enterprise 64位版本11.0.5623.0

  • 我有一个名为 MyDomain 的域名,所有最终用户都是此域名的成员,例如来自美国的用户 Donald 和来自德国的用户 Fritz

  • 对于每个国家/地区,我都有专门的域名组,例如 MyDomain_Sales_USA 群组包含美国用户Donald, MyDomain_Sales_GER 包含德国用户Fritz

  • 我在MyDomain中有一个带有Sales数据库的SQL Server实例。

  • Sales数据库包含一个名为Products的表,如下所示:

    enter image description here

  • 最终用户使用其域帐户(单点登录)访问Products表以读取数据

商业案例:

  • 属于域组 MyDomain_Sales_USA 成员的美国用户只能看到Country = USA的产品,同样德国用户只会看到德国产品。
  • 经常在两个域组中添加和删除用户
  • SQL Server管理员只想配置域组。 SQL Server中未配置域用户。

我的方法:

  1. 使用SQL Server Management Studio我将域组 MyDomain_Sales_USA MyDomain_Sales_GER 添加到SQL Server Security \ Logins节点,并将每个组映射到Sales数据库。

  2. 我在Sales数据库SalesRole_USASalesRole_GER中创建了两个数据库角色。使用数据库角色属性对话框,我将MyDomain_Sales_USA添加为SalesRole_USA角色的成员,MyDomain_Sales_GER添加到SalesRole_GER角色

  3. 我使用以下select语句在产品数据库中创建了一个视图

    SELECT * 
    FROM Products 
    WHERE Country = GetCurrentUserCountry()
    
  4. 这是我的问题:

    如何在GetCurrentUserCountry()函数中确定连接用户所属的数据库角色?

    换句话说:如果Donald执行上面的select语句,那么函数必须返回'USA',如果Fritz执行语句,那么函数必须返回'GER'

    我的期望如下:

    1. SQL Server授予对Donald和Fritz的访问权限,因为他们的域组已注册并映射到Sales数据库

    2. 因此必须可以检索已连接用户的数据库角色

1 个答案:

答案 0 :(得分:0)

在GetCurrentUserCountry()函数中,我使用了系统函数IS_MEMBER(' MyDomain_Sales_USA')和IS_MEMBER(' MyDomain_Sales_GER'),这种方法很好,但有一个小的缺点,因为我必须每次创建新的国家/地区组时都会更新该功能。