Freigeben über


IS_SRVROLEMEMBER (Transact-SQL)

Gibt an, ob eine SQL Server-Anmeldung Mitglied der angegebenen festen Serverrolle ist.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )

Argumente

  • 'role'
    Der Name der zu überprüfenden Serverrolle. role ist ein Wert vom Datentyp sysname.

    Gültige Werte für role sind:

    • sysadmin

    • dbcreator

    • bulkadmin

    • diskadmin

    • processadmin

    • serveradmin

    • setupadmin

    • securityadmin

  • 'login'
    Der Name der zu überprüfenden SQL Server-Anmeldung. login ist ein Wert vom Datentyp sysname, der Standardwert ist NULL. Wenn kein Wert angegeben wird, basiert das Ergebnis auf dem aktuellen Ausführungskontext. Wenn das Wort NULL enthalten ist, wird NULL zurückgegeben.

Rückgabetypen

int

Hinweise

IS_SRVROLEMEMBER gibt folgende Werte zurück.

Rückgabewert

Beschreibung

0

login ist kein Mitglied von role.

1

login ist ein Mitglied von role.

NULL

role oder login ist nicht gültig.

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

Wenn eine Windows-Anmeldung wie Contoso\Mary5 für login angegeben wird, gibt IS_SRVROLEMEMBER den Wert NULL zurück, falls der Anmeldung der direkte Zugriff auf SQL Server nicht erteilt oder verweigert wurde.

Wenn der optionale Anmeldeparameter nicht bereitgestellt wird und die Anmeldung eine Windows-Domänenanmeldung ist, kann sie aufgrund der Mitgliedschaft in einer Windows-Gruppe Mitglied einer festen Serverrolle sein. Um derartige indirekte Mitgliedschaften aufzulösen, fordert IS_SRVROLEMEMBER 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_SRVROLEMEMBER 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_SRVROLEMEMBER zurückgegebene Wert von der letzten Datenaktualisierung des Authentifikators (z. B. Active Directory) für SQL Server unterscheiden.

Wenn der optionale Anmeldeparameter bereitgestellt wird, muss die Windows-Anmeldung, die abgefragt wird, in sys.server_principals vorhanden sein, oder IS_SRVROLEMEMBER gibt NULL zurück. Dies gibt an, dass die Anmeldung ungültig ist.

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

Falls der Domänencontroller nicht verfügbar ist, gibt der Aufruf von IS_SRVROLEMEMBER genaue Informationen zurück, wenn das Windows-Prinzipal lokal authentifiziert werden kann, z. B. ein lokales Windows-Konto oder eine SQL Server-Anmeldung.

IS_SRVROLEMEMBER gibt immer 0 zurück, wenn eine Windows-Gruppe als Anmeldeargument verwendet wird und diese Windows-Gruppe Mitglied einer anderen Windows-Gruppe ist, die wiederum ein Mitglied der angegebenen Serverrolle ist.

Die Benutzerkontensteuerung in Windows Vista und Windows Server 2008 kann auch andere Ergebnisse zurückgeben. Dies hängt davon ab, ob der Benutzer als Mitglied einer Windows-Gruppe oder als ein bestimmter SQL Server-Benutzer auf den Server zugreift. Weitere Informationen zur Benutzerkontensteuerung finden Sie unter Vorgehensweise: Herstellen einer Verbindung mit einem Computer mit SQL Server unter Windows Vista.

Diese Funktion wertet die Rollenmitgliedschaft aus, nicht die zugrunde liegende Berechtigung. Die feste Serverrolle sysadmin besitzt z. B. die CONTROL SERVER-Berechtigung. Wenn der Benutzer die CONTROL SERVER-Berechtigung besitzt, aber nicht Mitglied der Rolle ist, meldet diese Funktion ordnungsgemäß, dass der Benutzer nicht Mitglied der sysadmin-Rolle ist, obwohl der Benutzer dieselben Berechtigungen besitzt.

Beispiele

Das folgende Beispiel gibt an, ob die SQL Server-Anmeldung für den aktuellen Benutzer Mitglied der festen Serverrolle sysadmin ist.

IF IS_SRVROLEMEMBER ('sysadmin') = 1
   print 'Current user''s login is a member of the sysadmin role'
ELSE IF IS_SRVROLEMEMBER ('sysadmin') = 0
   print 'Current user''s login is NOT a member of the sysadmin role'
ELSE IF IS_SRVROLEMEMBER ('sysadmin') IS NULL
   print 'ERROR: The server role specified is not valid.'