Delen via


IS_MEMBER (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 de huidige gebruiker lid is van de gespecificeerde Microsoft Windows-groep, Microsoft Entra-groep of SQL Server-databaserol.

De IS_MEMBER functie wordt ondersteund voor Microsoft Entra-groepen. Het enige geval waarin IS_MEMBER niet werkt, is als de groep de Microsoft Entra-beheerder is voor de SQL-instantie.

Transact-SQL syntaxis-conventies

Opmerking

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

Syntaxis

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

Arguments

'groep'
Van toepassing op: SQL Server 2008 (10.0.x) en later

Is de naam van de Windows- of Microsoft Entra-groep die wordt gecontroleerd. Een Windows-groep moet in het formaat Domain\Group staan. groep is sysname.

'rol'
Is de naam van de SQL Server-rol die wordt gecontroleerd. Rol is Sysname en kan de vaste databaserollen of door de gebruiker gedefinieerde rollen omvatten, maar geen serverrollen.

Retourtypen

int

Opmerkingen

IS_MEMBER geeft de volgende waarden terug.

Retourwaarde Description
0 De huidige gebruiker is geen lid van de groep of rol.
1 De huidige gebruiker is lid van een groep of rol.
NUL Of een groep of rol is niet geldig. Wanneer deze wordt bevraagd door een SQL Server-login of een login met een applicatierol, geeft het NULL terug voor een Windows-groep.

IS_MEMBER bepaalt het lidmaatschap van de Windows-groep door een toegangstoken te onderzoeken dat door Windows is aangemaakt. Het toegangstoken weerspiegelt geen wijzigingen in het groepslidmaatschap die worden aangebracht nadat een gebruiker verbinding maakt met een instantie van SQL Server. Het lidmaatschap van een Windows-groep kan niet worden bevraagd door een SQL Server-login of een SQL Server-applicatierol.

Om leden toe te voegen en te verwijderen uit een databaserol, gebruik je ALTER ROLE (Transact-SQL). Om leden toe te voegen en te verwijderen uit een serverrol, gebruik je ALTER SERVER ROLE (Transact-SQL).

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, rapporteert deze functie correct 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 een andere SQL Server-login lid is van een databaserol, gebruik IS_ROLEMEMBER (Transact-SQL). Om te bepalen of een SQL Server-login lid is van een serverrol, gebruik IS_SRVROLEMEMBER (Transact-SQL).

Voorbeelden

Het volgende voorbeeld controleert of de huidige gebruiker lid is van een databaserol of een Windows-domeingroep.

-- 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  

Zie ook

IS_SRVROLEMEMBER (Transact-SQL)
Principals (Databasemotor)
Beveiligingscatalogusweergaven (Transact-SQL)
beveiligingsfuncties (Transact-SQL)