IS_SRVROLEMEMBER (Transact-SQL)
指示 SQL Server 登录名是否为指定服务器角色的成员。
语法
IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )
参数
' role '
要检查的服务器角色的名称。 role 的数据类型为 sysname。role 的有效值是用户定义的服务器角色和以下固定服务器角色:
sysadmin
serveradmin
dbcreator
setupadmin
bulkadmin
securityadmin
diskadmin
public
processadmin
' login '
要检查的 SQL Server 登录名。login 的数据类型为 sysname,默认值为 NULL。 如果未指定值,则结果视当前执行上下文而定。 如果此参数包含词 NULL,将返回 NULL。
返回类型
int
返回值 |
说明 |
---|---|
0 |
login 不是 role 的成员。 |
1 |
login 是 role 的成员。 |
NULL |
role 或 login 无效,或者您没有查看角色成员身份的权限。 |
注释
使用 IS_SRVROLEMEMBER 可确定当前用户是否可以执行需要服务器角色权限的操作。
如果为 login 指定了 Windows 登录名(例如 Contoso\Mary5),那么除非针对该登录名授予或拒绝了对 SQL Server 的直接访问权限,否则 IS_SRVROLEMEMBER 将返回 NULL。
如果未提供可选的 login 参数,且 login 是 Windows 域登录名,则它可以通过 Windows 组中的成员身份作为固定服务器角色的成员。 要解析这种间接成员身份,IS_SRVROLEMEMBER 将从域控制器中请求 Windows 组成员身份信息。 如果域控制器不可访问或没有响应,则 IS_SRVROLEMEMBER 在返回角色成员身份信息时将只考虑用户及其本地组。 如果指定的用户不是当前用户,则 IS_SRVROLEMEMBER 返回的值可能不同于验证器(例如 Active Directory)对 SQL Server 进行的最后一次数据更新。
如果提供了可选的登录名参数,则 sys.server_principals 中必须存在要查询的 Windows 登录名,否则 IS_SRVROLEMEMBER 将返回 NULL。 这指示该登录名无效。
如果登录名参数为域登录名或基于 Windows 组,且无法访问域控制器,则对 IS_SRVROLEMEMBER 的调用将失败,并可能返回不正确或不完整的数据。
如果域控制器不可用,则当 Windows 主体可在本地进行身份验证时(例如本地 Windows 帐户或 SQL Server 登录名),对 IS_SRVROLEMEMBER 的调用将返回准确的信息。
在某一 Windows 组用作登录参数,并且此 Windows 组是另一个 Windows 组的成员,而该组又是指定服务器角色的成员时,IS_SRVROLEMEMBER 始终返回 0。
Windows Vista 和 Windows Server 2008 中的用户帐户控制 (UAC) 可能也会返回不同的结果。这取决于用户在访问服务器时是作为 Windows 组成员还是作为特定的 SQL Server 用户。
此函数计算角色成员身份而非基础权限。 例如,sysadmin 固定服务器角色具有 CONTROL SERVER 权限。 如果用户具有 CONTROL SERVER 权限但是不是该角色的成员,此函数将正确报告用户不是 sysadmin 角色的成员,即使用户具有相同的权限也是如此。
相关函数
若要确定当前用户是否为指定 Windows 组或 SQL Server 数据库角色的成员,请使用 IS_MEMBER (Transact-SQL)。 若要确定一个 SQL Server 登录名是否为数据库角色的成员,请使用 IS_ROLEMEMBER (Transact-SQL)。
权限
要求具有服务器角色的 VIEW DEFINITION 权限。
示例
以下示例指示当前用户的 SQL Server 登录名是否是 sysadmin 固定服务器角色的成员。
IF IS_SRVROLEMEMBER ('sysadmin') = 1
print 'Current user''s login is a member of the sysadmin role'
ELSE IF IS_SRVROLEMEMBER ('sysadmin') = 0
print 'Current user''s login is NOT a member of the sysadmin role'
ELSE IF IS_SRVROLEMEMBER ('sysadmin') IS NULL
print 'ERROR: The server role specified is not valid.'
以下示例指示域登录名 Pat 是否是 diskadmin 固定服务器角色的成员。
SELECT IS_SRVROLEMEMBER('diskadmin', 'Contoso\Pat');