IS_SRVROLEMEMBER (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

指示 SQL Server 登录名是否为指定服务器角色的成员。

Transact-SQL 语法约定

语法

IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )  

注意

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

参数

'role'
要检查的服务器角色的名称。 role 为 sysname 。

role 的有效值是用户定义的服务器角色和以下固定服务器角色 :

  • sysadmin
  • serveradmin
  • dbcreator
  • setupadmin
  • bulkadmin
  • securityadmin
  • diskadmin
  • 公共
  • processadmin

'login'
是要检查的 SQL Server 登录名。 login 的数据类型为 sysname,默认值为 NULL。 如果未指定值,则结果视当前执行上下文而定。 如果参数包含单词 NULL,则返回 NULL。

注意

虽然 Microsoft Entra 登录名为 Azure SQL 数据库 和 Azure Synapse 的公共预览版,但不支持使用用于登录Microsoft Entra 主体。

返回类型

int

返回值 说明
0 login 不是角色的成员

在 Azure SQL 数据库中,此语句始终返回 0。
1 login 是 role 的成员 。
Null 角色登录 名无效,或者您没有查看角色成员身份的权限。

注解

使用IS_SRVROLEMEMBER来确定当前用户是否可以执行需要服务器角色权限的操作。

如果为 login 指定了 Windows 登录名(例如 Contoso\Mary5),那么除非针对该登录名授予或拒绝了对 SQL Server 的直接访问权限,否则 IS_SRVROLEMEMBER 将返回 NULL。

如果未提供可选 登录 参数,并且 登录 名是 Windows 域登录名,则它可能是固定服务器角色的成员,通过 Windows 组中的成员身份。 要解析这种间接成员身份,IS_SRVROLEMEMBER 将从域控制器中请求 Windows 组成员身份信息。 如果域控制器不可访问或未响应, IS_SRVROLEMEMBER 只考虑用户及其本地组来返回角色成员身份信息。 如果指定的用户不是当前用户,则由IS_SRVROLEMEMBER返回的值可能与验证器的上次数据更新与 SQL Server 的验证器(如 Active Directory)的值不同。

如果提供了可选的登录参数,则查询的 Windows 登录名必须存在于sys.server_principals中,否则IS_SRVROLEMEMBER返回 NULL。 这表示登录名无效。

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

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

在某一 Windows 组用作登录参数,并且此 Windows 组是另一个 Windows 组的成员,而该组又是指定服务器角色的成员时,IS_SRVROLEMEMBER 始终返回 0。

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

此函数计算角色成员身份,而不是基础权限。 例如,sysadmin 固定服务器角色具有 CONTROL SERVER 权限 。 如果用户具有 CONTROL 标准版RVER 权限,但不是该角色的成员,则此函数将正确报告用户不是 sysadmin 角色的成员,即使用户具有相同的权限。

若要确定当前用户是指定 Windows 组、Microsoft Entra 组还是 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');  

另请参阅

IS_MEMBER (Transact-SQL)
安全函数 (Transact-SQL)