IS_ROLEMEMBER (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 SERVER ROLE (Transact-SQL)
ALTER SERVER ROLE (Transact-SQL)
DROP SERVER ROLE (Transact-SQL)