IS_MEMBER (Transact-SQL)

指示当前用户是否为指定 Microsoft Windows 组或 SQL Server 数据库角色的成员。

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

主题链接图标 Transact-SQL 语法约定

语法

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

参数

  • ' group '

    适用于:SQL Server 2008 到 SQL Server 2014。

    被检查的 Windows 组的名称;必须采用格式 Domain\Group。 group 的数据类型为 sysname。

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

返回类型

int

注释

IS_MEMBER 返回以下值。

返回值

说明

0

当前用户不是 group 或 role 的成员。

1

当前用户是 group 或 role 的成员。

NULL

group 或 role 无效。 在由 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 DATABASE 权限,但不是该角色的成员,此函数将正确报告用户不是 db_owner 角色的成员,即使用户具有相同的权限也是如此。

相关函数

若要确定另一个 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)

概念

主体(数据库引擎)