IS_MEMBER (Transact-SQL)

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

Gibt an, ob der aktuelle Benutzer Mitglied der angegebenen Microsoft Windows-Gruppe, Microsoft Entra-Gruppe oder SQL Server-Datenbankrolle ist.

Die IS_MEMBER-Funktion wird für Microsoft Entra-Gruppen unterstützt. Der einzige Fall, in dem IS_MEMBER nicht funktioniert, ist, wenn die Gruppe der Microsoft Entra-Administrator für die SQL-Instanz ist.

Transact-SQL-Syntaxkonventionen

Hinweis

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

Syntax

IS_MEMBER ( { 'group' | 'role' } )  

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

'group'
Gilt für: SQL Server 2008 (10.0.x) und später

Ist der Name der überprüften Windows- oder Microsoft Entra-Gruppe. Eine Windows-Gruppe muss im Format "Do Standard\ Group" vorliegen. group ist vom Datentyp sysname.

'role'
Der Name der zu überprüfenden SQL Server-Rolle. role ist vom Datentyp sysname und kann feste Datenbankrollen oder benutzerdefinierte Rollen, nicht jedoch Serverrollen einschließen.

Rückgabetypen

int

Bemerkungen

IS_MEMBER gibt folgende Werte zurück.

Rückgabewert BESCHREIBUNG
0 Der aktuelle Benutzer ist kein Mitglied der Gruppe oder Rolle.
1 Der aktuelle Benutzer ist ein Mitglied von group oder role.
NULL Eine Gruppe oder Rolle ist ungültig. Bei Abfrage durch eine SQL Server-Anmeldung oder eine Anmeldung, die eine Anwendungsrolle verwendet, wird NULL für eine Windows-Gruppe zurückgegeben.

IS_MEMBER bestimmt die Windows-Gruppenmitgliedschaft durch Analysieren eines Zugriffstokens, das von Windows erstellt wird. Das Zugriffstoken spiegelt keine Änderungen in der Gruppenmitgliedschaft wider, die vorgenommen werden, nachdem ein Benutzer eine Verbindung mit einer Instanz von SQL Server hergestellt hat. Die Windows-Gruppenmitgliedschaft kann nicht von einer SQL Server-Anmeldung oder einer SQL Server-Anwendungsrolle abgefragt werden.

Um einer Datenbankrolle Elemente hinzuzufügen bzw. um diese aus ihr zu entfernen, verwenden Sie ALTER ROLE (Transact-SQL). Um einer Serverrolle Elemente hinzuzufügen bzw. um diese aus ihr zu entfernen, verwenden Sie ALTER SERVER ROLE (Transact-SQL).

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 zu bestimmen, ob ein anderer SQL Server-Anmeldename Mitglied einer Datenbankrolle ist, verwenden Sie IS_ROLEMEMBER (Transact-SQL). Zum Bestimmen, ob ein anderer SQL Server-Anmeldename ein Mitglied einer Datenbankrolle ist, verwenden Sie IS_SRVROLEMEMBER (Transact-SQL).

Beispiele

Im folgenden Beispiel wird überprüft, ob der aktuelle Benutzer ein Mitglied einer Datenbankrolle oder einer Windows-Domänengruppe ist.

-- Test membership in db_owner and print appropriate message.  
IF IS_MEMBER ('db_owner') = 1  
   PRINT 'Current user is a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') = 0  
   PRINT 'Current user is NOT a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') IS NULL  
   PRINT 'ERROR: Invalid group / role specified';  
GO  
  
-- Execute SELECT if user is a member of ADVWORKS\Shipping.  
IF IS_MEMBER ('ADVWORKS\Shipping') = 1  
   SELECT 'User ' + USER + ' is a member of ADVWORKS\Shipping.';   
GO  

Weitere Informationen

IS_SRVROLEMEMBER (Transact-SQL)
Prinzipale (Datenbank-Engine)
Sicherheitskatalogsichten (Transact-SQL)
Sicherheitsfunktionen (Transact-SQL)