IS_ROLEMEMBER (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Gibt an, ob ein angegebener Datenbankprinzipal ein Mitglied der angegebenen Datenbankrolle ist.

Transact-SQL-Syntaxkonventionen

Hinweis

Microsoft Entra-ID wurde zuvor als Azure Active Directory (Azure AD) bezeichnet.

Syntax

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

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

'role'
Der Name der Datenbankrolle, die überprüft wird. role weist den Typ sysname auf.

'database_principal'
Der Name des Datenbankbenutzers, der Datenbankrolle oder der Anwendungsrolle, der/die überprüft werden soll. database_principal ist vom Datentyp sysnameund hat den Standardwert NULL. Wenn kein Wert angegeben wird, basiert das Ergebnis auf dem aktuellen Ausführungskontext. Wenn der Parameter das Wort NULL enthalten ist, wird NULL zurückgegeben.

Rückgabetypen

int

Rückgabewert BESCHREIBUNG
0 database_principal ist kein Mitglied der Rolle.
1 database_principal ist ein Element von role.
NULL database_principal oder Rolle ist ungültig, oder Sie sind nicht berechtigt, die Rollenmitgliedschaft anzuzeigen.

Hinweise

Die IS_ROLEMEMBER-Funktion wird für einen Microsoft Entra-Administrator nicht unterstützt, wenn der Administrator Mitglied einer Microsoft Entra-Gruppe ist. Die IS_ROLEMEMBER-Funktion wird für Microsoft Entra-Benutzer unterstützt, die Mitglieder einer Microsoft Entra-Gruppe sind, es sei denn, diese Gruppe ist der Microsoft Entra-Administrator.

Mit IS_ROLEMEMBER legen Sie fest, ob der aktuelle Benutzer eine Aktion ausführen kann, für die die Berechtigungen der Datenbankrolle erforderlich sind.

Wenn database_principal auf einer Windows-Anmeldung basiert, z.B. Contoso\Mary5, gibt IS_ROLEMEMBER den Wert NULL zurück, falls der direkte Zugriff auf SQL Server für database_principal nicht erteilt oder verweigert wurde.

Wenn der optionale database_principal-Parameter nicht angegeben wird und die database_principal auf einer Windows-Aufgabe basiert Standard anmeldung kann es sich um ein Mitglied einer Datenbankrolle über die Mitgliedschaft in einer Windows-Gruppe handeln. Um derartige indirekte Mitgliedschaften aufzulösen, fordert IS_ROLEMEMBER Informationen zu Windows-Gruppenmitgliedschaften vom Domänencontroller an. Wenn auf den Do Standard-Controller nicht zugegriffen werden kann oder nicht reagiert, gibt IS_ROLEMEMBER Rollenmitgliedschaftsinformationen zurück, indem der Benutzer und seine lokalen Gruppen nur erfasst werden. Wenn der angegebene Benutzer nicht der aktuelle Benutzer ist, kann sich der von IS_ROLEMEMBER zurückgegebene Wert von der letzten Aktualisierung der Authentifikatoren (z. B. Active Directory) auf SQL Server unterscheiden.

Wenn der optionale database_principal-Parameter bereitgestellt wird, muss der Benutzer in sys.database_principals vorhanden sein, oder IS_ROLEMEMBER GIBT NULL zurück.

Wenn der database_principal-Parameter auf einer Domänenanmeldung oder einer Windows-Gruppe basiert und auf den Domänencontroller nicht zugegriffen werden kann, schlagen Aufrufe von IS_ROLEMEMBER fehl und können falsche oder unvollständige Daten zurückgeben.

Wenn der Do Standard Controller nicht verfügbar ist, gibt der Aufruf von IS_ROLEMEMBER genaue Informationen zurück, wenn der Windows-Prinzipal lokal authentifiziert werden kann, z. B. ein lokales Windows-Konto oder eine SQL Server-Anmeldung.

IS_ROLEMEMBER gibt immer 0 zurück, wenn eine Windows-Gruppe als Datenbankprinzipal-Argument verwendet wird. Diese Windows-Gruppe ist ein Element einer anderen Windows-Gruppe, die wiederum ein Element der angegebenen Datenbankrolle ist.

Auch die Benutzerkontensteuerung in Windows Vista und Windows Server 2008 kann unterschiedliche Ergebnisse zurückgeben. Dies hängt davon ab, ob der Benutzer auf den Server als Mitglied einer Windows-Gruppe oder als ein bestimmter SQL Server-Benutzer zugreift.

Diese Funktion wertet die Rollenmitgliedschaft aus, nicht die zugrunde liegende Berechtigung. Die feste Datenbankrolle db_owner besitzt z.B. die Berechtigung CONTROL DATABASE. Wenn der Benutzer über die BERECHTIGUNG CONTROL DATABASE verfügt, aber kein Mitglied der Rolle ist, meldet diese Funktion ordnungsgemäß, dass der Benutzer kein Mitglied der rolle db_owner ist, obwohl der Benutzer über die gleichen Berechtigungen verfügt.

Mitglieder der festen Serverrolle sysadmin treten jeder Datenbank als dbo-Benutzer bei. Wenn die Berechtigungen der Mitglieder der festen sysadmin-Serverrolle überprüft werden, werden auch die Berechtigungen für dbo, aber nicht die ursprünglichen Anmeldeinformationen, überprüft. Da dbo keiner Datenbankrolle hinzugefügt werden kann und in Windows-Gruppen nicht vorhanden ist, gibt dbo immer 0 (oder NULL zurück, wenn die Rolle nicht vorhanden ist).

Um festzustellen, ob der aktuelle Benutzer Mitglied der angegebenen Windows-Gruppe, Microsoft Entra-Gruppe oder SQL Server-Datenbankrolle ist, verwenden Sie IS_MEMBER (Transact-SQL).> Zum Bestimmen, ob ein anderer SQL Server-Anmeldename ein Mitglied einer Datenbankrolle ist, verwenden Sie IS_SRVROLEMEMBER (Transact-SQL).

Berechtigungen

Erfordert die VIEW DEFINITION-Berechtigung für die Datenbankrolle.

Beispiele

Das folgende Beispiel gibt an, ob der aktuelle Benutzer Mitglied der festen Datenbankrolle db_datareader ist.

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.';  

Weitere Informationen

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)
Sicherheitsfunktionen (Transact-SQL)