IS_ROLEMEMBER (Transact-SQL)

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

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

  • ' role '
    Der Name der Datenbankrolle, die überprüft wird. role ist vom Datentyp sysname.

  • ' database_principal '
    Der Name des Datenbankbenutzers, der Datenbankrolle oder der Anwendungsrolle, der/die überprüft werden soll. database_principal ist vom Datentyp sysname. Der Standardwert ist 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 von role.

1

database_principal ist ein Element von role.

NULL

database_principal oder role ist nicht gültig, oder Sie verfügen über keine Berechtigung zum Anzeigen der Rollenmitgliedschaft.

Hinweise

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 database_principal der direkte Zugriff auf SQL Server nicht erteilt oder verweigert wurde.

Wenn der optionale database_principal-Parameter nicht bereitgestellt wird und der database_principal auf einer Windows-Domänenanmeldung basiert, kann er aufgrund der Mitgliedschaft in einer Windows-Gruppe Mitglied einer Datenbankrolle sein. Um derartige indirekte Mitgliedschaften aufzulösen, fordert IS_ROLEMEMBER Informationen zu Windows-Gruppenmitgliedschaften vom Domänencontroller an. Wenn nicht auf den Domänencontroller zugegriffen werden kann oder der Domänencontroller nicht reagiert, berücksichtigt IS_ROLEMEMBER beim Zurückgeben der Informationen zur Rollenmitgliedschaft nur den Benutzer und die lokalen Gruppen. Wenn der angegebene Benutzer nicht der aktuelle Benutzer ist, kann sich der durch IS_ROLEMEMBER zurückgegebene Wert vom letzten Datenupdate des Authentifikators (z. B. Active Directory) für SQL Server unterscheiden.

Wenn der optionale database_principal-Parameter bereitgestellt wird, muss der Datenbankprinzipal, der abgefragt wird, in sys.database_principals vorhanden sein. Andernfalls gibt IS_ROLEMEMBER den Wert NULL zurück. Dies bedeutet, dass der database_principal in dieser Datenbank nicht gültig ist.

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 Domänencontroller 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 können unterschiedliche Ergebnisse zurückgegeben. 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 CONTROL DATABASE-Berechtigung. Wenn der Benutzer die CONTROL DATABASE-Berechtigung besitzt, aber nicht Mitglied der Rolle ist, meldet diese Funktion ordnungsgemäß, dass der Benutzer nicht Mitglied der db_owner-Rolle ist, obwohl der Benutzer dieselben Berechtigungen besitzt.

Verwandte Funktionen

Verwenden Sie IS_MEMBER (Transact-SQL), um zu ermitteln, ob der aktuelle Benutzer ein Mitglied der angegebenen Windows-Gruppe oder der SQL Server-Datenbankrolle ist. Um zu bestimmen, ob eine SQL Server-Anmeldung ein Mitglied einer Serverrolle 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.'

Siehe auch

Verweis

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)