適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 資料庫
指出指定的資料庫主體是否為指定之資料庫角色的成員。
注意
Microsoft Entra ID 先前稱為 Azure Active Directory (Azure AD)。
語法
IS_ROLEMEMBER ( 'role' [ , 'database_principal' ] )
引數
'role'
要檢查之資料庫角色的名稱。
role 為 sysname。
'database_principal'
要檢查之資料庫使用者、資料庫角色或應用程式角色的名稱。
database_principal 為具有 NULL 預設值的 sysname。 如果未指定值,結果將以目前的執行內容為依據。 如果參數包含 NULL 一詞,就會傳回 NULL。
傳回型別
int
| 傳回值 | 描述 |
|---|---|
| 0 | database_principal不是角色的成員。 |
| 1 | database_principal 是 role 的成員。 |
| NULL | database_principal或角色無效,或您沒有檢視角色成員資格的許可權。 |
備註
當 系統管理員是Microsoft Entra 群組的成員時,Microsoft Entra 系統管理員不支援IS_ROLEMEMBER 函式。 IS_ROLEMEMBER函式支持屬於 Microsoft Entra 群組成員的 Microsoft Entra 使用者,除非該群組是 entra 系統管理員Microsoft。
請利用 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.';
另請參閱
建立角色(Transact-SQL)
ALTER 角色(Transact-SQL)
放棄角色(Transact-SQL)
建立伺服器角色(Transact-SQL)
ALTER 伺服器角色(Transact-SQL)
DROP SERVER 角色(Transact-SQL)
IS_MEMBER(Transact-SQL)
IS_SRVROLEMEMBER(Transact-SQL)
安全性函數 (Transact-SQL)