IS_SRVROLEMEMBER (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

指出 SQL Server 登入是否為指定伺服器角色的成員。

Transact-SQL 語法慣例

Syntax

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

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

'role'
這是要檢查的伺服器角色名稱。 rolesysname

role 的有效值是使用者定義的伺服器角色和下列固定伺服器角色:

  • 系統管理員 (sysadmin)
  • serveradmin
  • dbcreator
  • setupadmin
  • bulkadmin
  • securityadmin
  • diskadmin
  • 公開
  • processadmin

'login'
這是要檢查的 SQL Server 登入名稱。 login 是預設值為 NULL 的 sysname。 如果未指定值,結果將以目前的執行內容為依據。 如果參數包含 NULL 這個字,則會傳回 NULL。

注意

雖然 Microsoft Entra 登入處於 Azure SQL 資料庫 和 Azure Synapse 的公開預覽狀態,但不支援使用 Microsoft Entra 主體進行登入

傳回型別

int

傳回值 描述
0 login 不是角色的成員

在 Azure SQL Database 中,這個陳述式一律會傳回 0。
1 loginrole 的成員。
NULL 角色登入 無效,或您沒有檢視角色成員資格的許可權。

備註

使用IS_SRVROLEMEMBER來判斷目前使用者是否可以執行需要伺服器角色許可權的動作。

如果針對 login 指定 Windows 登入 (例如 Contoso\Mary5),IS_SRVROLEMEMBER 就會傳回 NULL,除非針對此登入授與或拒絕 SQL Server 的直接存取權。

如果未提供選擇性登入參數,而且如果login是Windows網域登入,它可能是固定伺服器角色的成員,可透過Windows群組的成員資格。 為了解析這類間接成員資格,IS_SRVROLEMEMBER 會要求網域控制站提供 Windows 群組成員資格資訊。 如果域控制器無法存取或沒有回應, IS_SRVROLEMEMBER 只考慮使用者及其本地組,以傳回角色成員資格資訊。 如果指定的使用者不是目前使用者,IS_SRVROLEMEMBER傳回的值可能會與驗證器的上次數據更新 SQL Server 不同。

如果提供選擇性登入參數,則查詢的 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 SERVER 許可權,但不是角色的成員,則此函式會正確地報告使用者不是系統管理員角色的成員,即使使用者擁有相同的許可權也一樣。

若要判斷目前使用者是否為指定 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)