IS_ROLEMEMBER (Transact-SQL)

指示指定的資料庫主體是否為指定之資料庫角色的成員。

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

語法

IS_ROLEMEMBER ( 'role' [ , 'database_principal' ] )

引數

  • ' role '
    要檢查之資料庫角色的名稱。 role 是 sysname。

  • ' database_principal '
    要檢查之資料庫使用者、資料庫角色或應用程式角色的名稱。 database_principal 是 sysname,預設值為 NULL。 如果未指定值,結果將以目前的執行內容為依據。 如果參數包含 NULL 一詞,就會傳回 NULL。

傳回類型

int

傳回值

說明

0

database_principal 不是 role 的成員。

1

database_principal 是 role 的成員。

NULL

database_principal 或 role 無效,或是您沒有檢視角色成員資格的權限。

備註

請利用 IS_ROLEMEMBER 函數來判斷目前使用者是否能執行需要資料庫角色權限的動作。

如果 database_principal 是以 Windows 登入為基礎 (例如 Contoso\Mary5),除非 database_principal 已被授與或拒絕 SQL Server 的直接存取權,否則 IS_ROLEMEMBER 會傳回 NULL。

如果未提供選擇性的 database_principal 參數,而且如果 database_principal 是以 Windows 網域登入為基礎,它可能是藉由 Windows 群組中的成員資格而成為資料庫角色的成員。 為了解析這類間接成員資格,IS_ROLEMEMBER 會要求網域控制站提供 Windows 群組成員資格資訊。 如果網域控制站無法存取或沒有回應,IS_ROLEMEMBER 只會藉由考量使用者及其本機群組,傳回角色成員資格資訊。 如果指定的使用者不是目前的使用者,IS_ROLEMEMBER 傳回的值可能會與驗證器 (如 Active Directory) 上一次對 SQL Server 的資料更新不同。

如果提供了選擇性 database_principal 參數,則進行查詢的資料庫主體必須存在於 sys.database_principals 中,否則 IS_ROLEMEMBER 將傳回 NULL。 這表示 database_principal 在此資料庫中無效。

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

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

當 Windows 群組當做資料庫主體引數來使用,而且這個 Windows 群組是另一個 Windows 群組的成員,而後者群組又是指定之資料庫角色的成員時,IS_ROLEMEMBER 一律傳回 0。

Windows Vista 和 Windows Server 2008 中找到的使用者帳戶控制 (UAC) 也可能會傳回不同的結果。 這會取決於使用者是以 Windows 群組成員還是特定 SQL Server 使用者的身分存取伺服器而定。

這個函數會評估角色成員資格,而非基礎權限。 例如,db_owner 固定資料庫角色擁有 CONTROL DATABASE 權限。 如果使用者擁有 CONTROL DATABASE 權限,但不是此角色的成員,這個函數將正確回報該使用者不是 db_owner 角色的成員,即使該使用者擁有相同的權限也一樣。

相關函數

若要判斷目前使用者是否為指定之 Windows 群組或 SQL Server 資料庫角色的成員,請使用 IS_MEMBER (Transact-SQL)。 若要判斷 SQL Server 登入是否為伺服器角色的成員,請使用 IS_SRVROLEMEMBER (Transact-SQL)

權限

需要資料庫角色的 VIEW DEFINITION 權限。

範例

下列範例指出目前使用者是否為 db_datareader 固定資料庫角色的成員。

IF IS_ROLEMEMBER ('db_datareader') = 1
   print 'Current user is a member of the db_datareader role'
ELSE IF IS_ROLEMEMBER ('db_datareader') = 0
   print 'Current user is NOT a member of the db_datareader role'
ELSE IF IS_ROLEMEMBER ('db_datareader') IS NULL
   print 'ERROR: The database role specified is not valid.'

請參閱

參考

CREATE ROLE (Transact-SQL)

ALTER ROLE (Transact-SQL)

DROP ROLE (Transact-SQL)

CREATE SERVER ROLE (Transact-SQL)

ALTER SERVER ROLE (Transact-SQL)

DROP SERVER ROLE (Transact-SQL)

IS_MEMBER (Transact-SQL)

IS_SRVROLEMEMBER (Transact-SQL)

安全性函數 (Transact-SQL)