Delen via


IS_ROLEMEMBER (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform Systeem (PDW)SQL-database in Microsoft Fabric

Geeft aan of een gespecificeerde databaseprincipal lid is van de gespecificeerde databaserol.

Transact-SQL syntaxis-conventies

Opmerking

Microsoft Entra-id werd voorheen Azure Active Directory (Azure AD) genoemd.

Syntaxis

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

Arguments

'rol'
Is de naam van de databaserol die wordt gecontroleerd. Rol is Sysname.

'database_principal'
Is de naam van de databasegebruiker, databaserol of applicatierol die gecontroleerd moet worden. database_principal is sysname, met als standaard NULL. Als er geen waarde wordt gespecificeerd, is het resultaat gebaseerd op de huidige uitvoeringscontext. Als de parameter het woord NULL bevat, geeft hij NULL terug.

Retourtypen

int

Retourwaarde Description
0 database_principal is geen lid van de functie.
1 database_principal is een lid van de rol.
NUL database_principal of rol is niet geldig, of je hebt geen toestemming om het lidmaatschap van de rol te bekijken.

Opmerkingen

De IS_ROLEMEMBER functie wordt niet ondersteund voor een Microsoft Entra-beheerder wanneer de beheerder lid is van een Microsoft Entra-groep. De IS_ROLEMEMBER-functie wordt ondersteund voor Microsoft Entra-gebruikers die lid zijn van een Microsoft Entra-groep, tenzij die groep de Microsoft Entra-beheerder is.

Gebruik IS_ROLEMEMBER om te bepalen of de huidige gebruiker een actie kan uitvoeren die de rechten van de databaserol vereist.

Als database_principal gebaseerd is op een Windows-login, zoals Contoso\Mary5, geeft IS_ROLEMEMBER NULL terug, tenzij de database_principal directe toegang tot SQL Server heeft gekregen of geweigerd.

Als de optionele database_principal-parameter niet wordt gegeven en de database_principal gebaseerd is op een Windows-domeinlogin, kan het lid zijn van een databaserol via lidmaatschap van een Windows-groep. Om dergelijke indirecte lidmaatschappen op te lossen, vraagt IS_ROLEMEMBER om Windows-groepslidmaatschapsinformatie van de domeincontroller. Als de domeincontroller niet toegankelijk is of niet reageert, geeft IS_ROLEMEMBER rollidmaatschapsinformatie terug door alleen rekening te houden met de gebruiker en zijn lokale groepen. Als de opgegeven gebruiker niet de huidige gebruiker is, kan de waarde die door IS_ROLEMEMBER wordt teruggegeven verschillen van de laatste data-update van de authenticator (zoals Active Directory) naar SQL Server.

Als de optionele parameter database_principal wordt opgegeven, moet de gebruiker in sys.database_principals bestaan, anders geeft IS_ROLEMEMBER NULL terug.

Wanneer de database_principal-parameter gebaseerd is op een domeinlogin of een Windows-groep en de domeincontroller ontoegankelijk is, zullen aanroepen naar IS_ROLEMEMBER mislukken en kunnen onjuiste of onvolledige gegevens teruggeven.

Als de domeincontroller niet beschikbaar is, levert de aanroep naar IS_ROLEMEMBER nauwkeurige informatie terug wanneer de Windows-principal lokaal kan worden geauthenticeerd, zoals een lokaal Windows-account of een SQL Server-login.

IS_ROLEMEMBER geeft altijd 0 terug wanneer een Windows-groep als databasehoofdargument wordt gebruikt, en deze Windows-groep is lid van een andere Windows-groep die op zijn beurt lid is van de gespecificeerde databaserol.

De User Account Control (UAC) in Windows Vista en Windows Server 2008 kan ook andere resultaten opleveren. Dit hangt ervan af of de gebruiker de server heeft betreden als lid van een Windows-groep of als specifieke SQL Server-gebruiker.

Deze functie evalueert rollidmaatschap, niet de onderliggende toestemming. Bijvoorbeeld, de db_owner vaste databaserol heeft de CONTROL DATABASE-machtiging . Als de gebruiker de CONTROL DATABASE-machtiging heeft maar geen lid is van de rol, zal deze functie correct rapporteren dat de gebruiker geen lid is van de db_owner rol, ook al heeft de gebruiker dezelfde rechten.

Leden van de sysadmin-vaste serverrol voeren elke database in als dbo-gebruiker . Het controleren van de rechten voor lid van de sysadmin-fixe serverrol, controleert de rechten voor dbo, niet voor de oorspronkelijke login. Omdat dbo niet aan een databaserol kan worden toegevoegd en niet bestaat in Windows-groepen, geeft dbo altijd 0 terug (of NULL als de rol niet bestaat).

Om te bepalen of de huidige gebruiker lid is van de gespecificeerde Windows-groep, Microsoft Entra-groep of SQL Server-databaserol, gebruik IS_MEMBER (Transact-SQL). Om te bepalen of een SQL Server-login lid is van een serverrol, gebruik IS_SRVROLEMEMBER (Transact-SQL).

Permissions

Vereist VIEW DEFINITION-toestemming voor de databaserol.

Voorbeelden

Het volgende voorbeeld geeft aan of de huidige gebruiker lid is van de db_datareader vaste databaserol.

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

Zie ook

AANMAKEN ROL (Transact-SQL)
ROL WIJZIGEN (Transact-SQL)
DROPROL (Transact-SQL)
MAAK SERVERROL AAN (Transact-SQL)
ALTER SERVER ROL (Transact-SQL)
ROL VAN DROP SERVER (Transact-SQL)
IS_MEMBER (Transact-SQL)
IS_SRVROLEMEMBER (Transact-SQL)
beveiligingsfuncties (Transact-SQL)