IS_SRVROLEMEMBER (Transact-SQL)

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

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

語法

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

引數

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

    role 的有效值包括下列各項:

    sysadmin

    • dbcreator

    • bulkadmin

    • diskadmin

    • processadmin

    • serveradmin

    • setupadmin

    • securityadmin

  • 'login'
    這是要檢查的 SQL Server 登入名稱。login 是 sysname,預設值是 NULL。如果沒有指定值,結果將會以目前的執行內容為基礎。

傳回類型

int

備註

IS_SRVROLEMEMBER 會傳回下列值。

傳回值

說明

0

login 不是 role 的成員。

1

login 是 role 的成員。

NULL

role 或 login 無效。

請利用這個函數來判斷目前使用者是否能執行需要伺服器角色權限的動作。

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

如果未提供選用的登入參數,而且如果登入是 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 Vista 和 Windows Server 2008 中找到的使用者帳戶控制 (UAC) 也可能會傳回不同的結果。 這將會取決於使用者是以 Windows 群組成員還是特定 SQL Server 使用者的身分存取伺服器而定。如需有關使用者帳戶控制的詳細資訊,請參閱<如何:從 Windows Vista 連接到 SQL Server>。

這個函數會評估角色成員資格,而不是基礎權限。例如,系統管理員 (sysadmin) 固定伺服器角色具有 CONTROL SERVER 權限。如果使用者具有 CONTROL SERVER 權限但不是此角色的成員,這個函數將會正確報告使用者不是系統管理員 (sysadmin) 角色的成員,即使使用者具有相同的權限也是如此。

範例

下列範例指出目前使用者的 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.'