IS_SRVROLEMEMBER (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
指出 SQL Server 登入是否為指定伺服器角色的成員。
語法
IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )
引數
' role '
這是要檢查的伺服器角色名稱。 role 為 sysname。
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 | login 為 role 的成員。 |
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');