IS_ROLEMEMBER (Transact-SQL)

指示指定的数据库主体是否为指定数据库角色的成员。

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

语法

IS_ROLEMEMBER ( 'role' [ , 'database_principal' ] )

参数

  • ' role '
    要检查的数据库角色的名称。 role 的数据类型为 sysname。

  • ' database_principal '
    要检查的数据库用户、数据库角色或应用程序角色的名称。 database_principal 的数据类型为 sysname,默认值为 NULL。 如果未指定值,则结果视当前执行上下文而定。 如果此参数包含词 NULL,将返回 NULL。

返回类型

int

返回值

说明

0

database_principal 不是 role 的成员。

1

database_principal 是 role 的成员。

NULL

database_principal 或 role 无效,或者您没有查看角色成员身份的权限。

注释

请使用 IS_ROLEMEMBER 确定当前用户是否可以执行需要数据库角色权限的操作。

如果 database_principal 基于 Windows 登录名,如 Contoso\Mary5,则 IS_ROLEMEMBER 返回 NULL,除非为 database_principal 授予或拒绝了 SQL Server 的直接访问权限。

如果未提供可选的 database_principal 参数,并且 database_principal 基于 Windows 域登录名,则它可能是通过 Windows 组成员身份而成为的数据库角色成员。 要解析这种间接成员身份,IS_ROLEMEMBER 将从域控制器中请求 Windows 组成员身份信息。 如果无法访问域控制器或域控制器没有响应,则 IS_ROLEMEMBER 在返回角色成员身份信息时只考虑用户及其本地组。 如果指定的用户不是当前用户,则 IS_ROLEMEMBER 返回的值可能不同于验证器(如 Active Directory)上次进行的 SQL Server 数据更新。

如果提供了可选的 database_principal 参数,则要查询的数据库主体必须在 sys.database_principals 中存在,否则,IS_ROLEMEMBER 将返回 NULL。 这表明 database_principal 在此数据库中无效。

如果 database_principal 参数基于域登录名或 Windows 组,并且无法访问域控制器,则对 IS_ROLEMEMBER 的调用将失败,并且可能会返回不正确或不完整的数据。

如果域控制器不可用,并且可以在本地对 Windows 主体进行身份验证时(例如本地 Windows 帐户或 SQL Server 登录名),对 IS_ROLEMEMBER 的调用将返回准确的信息。

在某一 Windows 组用作数据库主体参数,并且此 Windows 组是另一个 Windows 组的成员,而该组又是指定数据库角色的成员时,IS_ROLEMEMBER 始终返回 0。

Windows Vista 和 Windows Server 2008 中的用户帐户控制 (UAC) 可能也会返回不同的结果。 这取决于用户在访问服务器时是作为 Windows 组成员还是特定的 SQL Server 用户。

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

相关函数

若要确定当前用户是否为指定 Windows 组或 SQL Server 数据库角色的成员,请使用 IS_MEMBER (Transact-SQL)。 若要确定 SQL Server 登录名是否为服务器角色的成员,请使用 IS_SRVROLEMEMBER (Transact-SQL)

权限

要求具有数据库角色的 VIEW DEFINITION 权限。

示例

以下示例指示当前用户是否为 db_datareader 固定数据库角色的成员。

IF IS_ROLEMEMBER ('db_datareader') = 1
   print 'Current user is a member of the db_datareader role'
ELSE IF IS_ROLEMEMBER ('db_datareader') = 0
   print 'Current user is NOT a member of the db_datareader role'
ELSE IF IS_ROLEMEMBER ('db_datareader') IS NULL
   print 'ERROR: The database role specified is not valid.'

请参阅

参考

CREATE ROLE (Transact-SQL)

ALTER ROLE (Transact-SQL)

DROP ROLE (Transact-SQL)

CREATE SERVER ROLE (Transact-SQL)

ALTER SERVER ROLE (Transact-SQL)

DROP SERVER ROLE (Transact-SQL)

IS_MEMBER (Transact-SQL)

IS_SRVROLEMEMBER (Transact-SQL)

安全函数 (Transact-SQL)