如何检索 Active Directory 域组的 SQL 服务器数据库角色
How to retrieve SQL Server database roles for an Active Directory domain group
我有以下环境:
Microsoft SQL Server Enterprise 64 位版本 11.0.5623.0 运行 Microsoft Windows NT 6.1 (7601)
我有一个名为 MyDomain 的域,所有最终用户都是该域的成员,例如来自美国的用户 Donald 和来自德国的用户 Fritz
对于每个国家/地区,我都有一个专门的域组,例如MyDomain_Sales_USA 组包含美国用户 Donald,MyDomain_Sales_GER 包含德国用户 Fritz
我在 MyDomain
中有一个 SQL 服务器实例,带有 Sales
数据库。
Sales
数据库包含一个名为 Products
的 table,如下所示:
最终用户使用他们的域帐户(单点登录)访问 Products
table 以读取数据
业务案例:
- 属于域组 MyDomain_Sales_USA 的美国用户只能看到带有
Country = USA
的产品,同样德国用户只能看到德国产品。
- 在两个域组中频繁添加和删除用户
- SQL 服务器管理员只想配置域组。 SQL 服务器中没有配置域用户。
我的做法:
使用 SQL Server Management Studio 我添加了域组 MyDomain_Sales_USA 和 MyDomain_Sales_GER 到 SQL 服务器 Security\Logins 节点并将每个组映射到销售数据库。
我在 Sales
数据库中创建了两个数据库角色,SalesRole_USA
和 SalesRole_GER
。使用数据库角色属性对话框,我将 MyDomain_Sales_USA
作为成员添加到 SalesRole_USA
角色,将 MyDomain_Sales_GER
添加到 SalesRole_GER
角色
我使用以下 select 语句在产品数据库中创建了一个视图
SELECT *
FROM Products
WHERE Country = GetCurrentUserCountry()
这是我的问题:
如何在GetCurrentUserCountry()
函数中判断连接用户属于哪个数据库角色?
换句话说:如果 Donald 执行上面的 select 语句那么函数必须 return 'USA',如果 Fritz 执行语句那么函数必须 return 'GER'
我的期望如下:
SQL 服务器授予对 Donald 和 Fritz 的访问权限,因为他们的域组已注册并映射到 Sales
数据库
因此必须可以检索连接用户的数据库角色
在 GetCurrentUserCountry() 函数中我使用了系统函数 IS_MEMBER('MyDomain_Sales_USA') 和 IS_MEMBER('MyDomain_Sales_GER'),这工作正常但有一个小缺点因为每次创建新的国家/地区组时我都必须更新函数。
我有以下环境:
Microsoft SQL Server Enterprise 64 位版本 11.0.5623.0 运行 Microsoft Windows NT 6.1 (7601)
我有一个名为 MyDomain 的域,所有最终用户都是该域的成员,例如来自美国的用户 Donald 和来自德国的用户 Fritz
对于每个国家/地区,我都有一个专门的域组,例如MyDomain_Sales_USA 组包含美国用户 Donald,MyDomain_Sales_GER 包含德国用户 Fritz
我在
MyDomain
中有一个 SQL 服务器实例,带有Sales
数据库。Sales
数据库包含一个名为Products
的 table,如下所示:最终用户使用他们的域帐户(单点登录)访问
Products
table 以读取数据
业务案例:
- 属于域组 MyDomain_Sales_USA 的美国用户只能看到带有
Country = USA
的产品,同样德国用户只能看到德国产品。 - 在两个域组中频繁添加和删除用户
- SQL 服务器管理员只想配置域组。 SQL 服务器中没有配置域用户。
我的做法:
使用 SQL Server Management Studio 我添加了域组 MyDomain_Sales_USA 和 MyDomain_Sales_GER 到 SQL 服务器 Security\Logins 节点并将每个组映射到销售数据库。
我在
Sales
数据库中创建了两个数据库角色,SalesRole_USA
和SalesRole_GER
。使用数据库角色属性对话框,我将MyDomain_Sales_USA
作为成员添加到SalesRole_USA
角色,将MyDomain_Sales_GER
添加到SalesRole_GER
角色我使用以下 select 语句在产品数据库中创建了一个视图
SELECT * FROM Products WHERE Country = GetCurrentUserCountry()
这是我的问题:
如何在GetCurrentUserCountry()
函数中判断连接用户属于哪个数据库角色?
换句话说:如果 Donald 执行上面的 select 语句那么函数必须 return 'USA',如果 Fritz 执行语句那么函数必须 return 'GER'
我的期望如下:
SQL 服务器授予对 Donald 和 Fritz 的访问权限,因为他们的域组已注册并映射到
Sales
数据库因此必须可以检索连接用户的数据库角色
在 GetCurrentUserCountry() 函数中我使用了系统函数 IS_MEMBER('MyDomain_Sales_USA') 和 IS_MEMBER('MyDomain_Sales_GER'),这工作正常但有一个小缺点因为每次创建新的国家/地区组时我都必须更新函数。