Share via


IS_SRVROLEMEMBER (Transact-SQL)

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

主題連結圖示 Transact-SQL 語法慣例

語法

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 的資料更新不同。

如果提供了選擇性登入參數,則進行查詢的 Windows 登入必須存在於 sys.server_principals 中,否則 IS_SRVROLEMEMBER 將傳回 NULL。 這表示登入無效。

當登入參數為網域登入或以 Windows 群組為基礎,而且無法存取網域控制站,IS_SRVROLEMEMBER 的呼叫將會失敗,而且可能會傳回不正確或不完整的資料。

如果無法存取網域控制站,當 Windows 主體可以在本機上經過驗證時,IS_SRVROLEMEMBER 的呼叫將傳回正確的資訊,例如,本機 Windows 帳戶或 SQL Server 登入。

當 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');

請參閱

參考

IS_MEMBER (Transact-SQL)

安全性函數 (Transact-SQL)