如何检索 Active Directory 域组的 SQL 服务器数据库角色

How to retrieve SQL Server database roles for an Active Directory domain group

我有以下环境:

业务案例:

我的做法:

  1. 使用 SQL Server Management Studio 我添加了域组 MyDomain_Sales_USAMyDomain_Sales_GER 到 SQL 服务器 Security\Logins 节点并将每个组映射到销售数据库。

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

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

    SELECT * 
    FROM Products 
    WHERE Country = GetCurrentUserCountry()
    

这是我的问题:

如何在GetCurrentUserCountry()函数中判断连接用户属于哪个数据库角色?

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

我的期望如下:

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

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

在 GetCurrentUserCountry() 函数中我使用了系统函数 IS_MEMBER('MyDomain_Sales_USA') 和 IS_MEMBER('MyDomain_Sales_GER'),这工作正常但有一个小缺点因为每次创建新的国家/地区组时我都必须更新函数。