IS_MEMBER (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

指示当前用户是指定 Microsoft Windows 组、Microsoft Entra 组还是 SQL Server 数据库角色的成员。

Microsoft Entra 组支持IS_MEMBER函数。 IS_MEMBER不起作用的一种情况是,如果组是 SQL 实例的 Microsoft Entra 管理员。

Transact-SQL 语法约定

注意

Microsoft Entra ID 以前称为 Azure Active Directory(Azure AD)。

语法

IS_MEMBER ( { 'group' | 'role' } )  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

' group '
适用于:SQL Server 2008 (10.0.x) 及更高版本

正在检查的 Windows 或 Microsoft Entra 组的名称。 Windows 组必须采用域\组格式。 group 的数据类型为 sysname

'role'
要检查的 SQL Server 角色的名称。 role 的数据类型为 sysname,它可以包括数据库固定角色或用户定义的角色,但不能包括服务器角色

返回类型

int

备注

IS_MEMBER 返回以下值。

返回值 说明
0 当前用户不是组角色的成员
1 当前用户是 group 或 role 的成员
Null 角色无效。 在由 SQL Server 登录名或使用应用程序角色的登录名查询时,对于 Windows 组返回 NULL。

IS_MEMBER 通过检查 Windows 创建的访问令牌来确定 Windows 组成员身份。 访问令牌不反映用户在连接到 SQL Server 实例后进行的组成员身份更改。 SQL Server 登录名或 SQL Server 应用程序角色无法查询 Windows 组成员身份。

若要在数据库角色中添加和删除成员,请使用 ALTER ROLE (Transact-SQL)。 若要在服务器角色中添加和删除成员,请使用 ALTER SERVER ROLE (Transact-SQL)

此函数计算角色成员身份,而不是基础权限。 例如,db_owner 固定数据库角色具有 CONTROL DATABASE 权限。 如果用户具有 CONTROL DATABA标准版权限,但不是该角色的成员,则此函数可正确报告用户不是db_owner角色的成员,即使用户具有相同的权限。

sysadmin 固定服务器角色的成员均以 dbo 用户身份进入每个数据库。 检查 sysadmin 固定服务器角色成员的权限会检查 dbo 的权限,而不是原始登录名。 由于 dbo 无法添加到数据库角色,并且 Windows 组中不存在, 因此 dbo 始终返回 0(如果角色不存在,则为 NULL)。

若要确定另一个 SQL Server 登录名是否为数据库角色的成员,请使用 IS_ROLEMEMBER (Transact-SQL)。 若要确定 SQL Server 登录名是否为服务器角色的成员,请使用 IS_SRVROLEMEMBER (Transact-SQL)

示例

以下示例检查当前用户是否为数据库角色或 Windows 域组的成员。

-- Test membership in db_owner and print appropriate message.  
IF IS_MEMBER ('db_owner') = 1  
   PRINT 'Current user is a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') = 0  
   PRINT 'Current user is NOT a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') IS NULL  
   PRINT 'ERROR: Invalid group / role specified';  
GO  
  
-- Execute SELECT if user is a member of ADVWORKS\Shipping.  
IF IS_MEMBER ('ADVWORKS\Shipping') = 1  
   SELECT 'User ' + USER + ' is a member of ADVWORKS\Shipping.';   
GO  

另请参阅

IS_SRVROLEMEMBER (Transact-SQL)
主体(数据库引擎)
安全性目录视图 (Transact-SQL)
安全函数 (Transact-SQL)