Share via


IS_ROLEMEMBER (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

Transact-SQL 語法慣例

注意

Microsoft Entra 標識符 先前稱為 Azure Active Directory (Azure AD)。

Syntax

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

注意

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

引數

'role'
要檢查之資料庫角色的名稱。 rolesysname

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

傳回型別

int

傳回值 描述
0 database_principal不是角色的成員
1 database_principalrole 的成員。
NULL database_principal或角色無效,或您沒有檢視角色成員資格的許可權。

備註

系統管理員是 Microsoft Entra 群組的成員時,Microsoft Entra 系統管理員不支援IS_ROLEMEMBER 功能。 除非該群組是 Microsoft Entra 系統管理員,否則 Microsoft Entra 用戶支援IS_ROLEMEMBER函式。

請利用 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傳回的值可能會與驗證器的上次數據更新 SQL Server 不同。

如果提供選擇性 database_principal 參數,用戶必須存在於sys.database_principals中,否則IS_ROLEMEMBER會傳回 NULL。

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

如果域控制器無法使用,IS_ROLEMEMBER呼叫會在本機驗證 Windows 主體時傳回正確的資訊,例如本機 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角色的成員,即使使用者擁有相同的許可權。

sysadmin 固定伺服器角色的成員會作為 dbo 使用者輸入每個資料庫。 若要檢查 sysadmin 固定伺服器角色成員的權限,請檢查 dbo 的權限,而非原始登入。 因為 dbo 無法新增至資料庫角色,而且不存在於 Windows 群組中, dbo 一律會傳回 0 (如果角色不存在,則為 NULL)。

若要判斷目前使用者是否為指定 Windows 群組、Microsoft Entra 群組或 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)