IS_MEMBER (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-databas i Microsoft Fabric

Anger om den nuvarande användaren är medlem i den specificerade Microsoft Windows-gruppen, Microsoft Entra-gruppen eller SQL Server-databasrollen.

Funktionen IS_MEMBER stöds för Microsoft Entra-grupper. Det enda fallet där IS_MEMBER inte fungerar är om gruppen är Microsoft Entra-administratör för SQL-instansen.

Transact-SQL syntaxkonventioner

Anmärkning

Microsoft Entra-ID kallades tidigare Azure Active Directory (Azure AD).

Syntax

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

Arguments

'grupp'
Gäller för: SQL Server 2008 (10.0.x) och senare

Är namnet på Windows- eller Microsoft Entra-gruppen som kontrolleras. En Windows-grupp måste vara i formatet Domain\Group. Group är sysname.

'roll'
Är namnet på SQL Server-rollen som kontrolleras. Rollen är Sysname och kan inkludera databasens fasta roller eller användardefinierade roller, men inte serverroller.

Returtyper

int

Anmärkningar

IS_MEMBER returnerar följande värden.

Returvärde Description
0 Nuvarande användare är inte medlem i gruppen eller rollen.
1 Nuvarande användare är medlem i en grupp eller roll.
NOLL Varken grupp eller roll är ogiltigt. När den förfrågas av en SQL Server-inloggning eller en inloggning med en applikationsroll, returneras NULL för en Windows-grupp.

IS_MEMBER bestämmer medlemskap i Windows-gruppen genom att undersöka en åtkomsttoken som skapats av Windows. Åtkomsttoken speglar inte förändringar i gruppmedlemskap som görs efter att en användare ansluter till en instans av SQL Server. Medlemskap i Windows-gruppen kan inte befrågas via en SQL Server-inloggning eller en SQL Server-applikationsroll.

För att lägga till och ta bort medlemmar från en databasroll, använd ALTER ROLE (Transact-SQL). För att lägga till och ta bort medlemmar från en serverroll, använd ALTER SERVER ROLE (Transact-SQL).

Denna funktion utvärderar rollmedlemskap, inte den underliggande behörigheten. Till exempel har den db_owner fasta databasrollen behörigheten CONTROL DATABASE . Om användaren har behörigheten CONTROL DATABASE men inte är medlem i rollen, rapporterar denna funktion korrekt att användaren inte är medlem i db_owner roll, även om användaren har samma behörigheter.

Medlemmar i sysadmin-fasta serverrollen anger varje databas som dbo-användare . Att kontrollera behörighet för medlem i sysadmin-funktionen fixade serverrollen, kontrollerar behörigheter för dbo, inte för den ursprungliga inloggningen. Eftersom dbo inte kan läggas till i en databasroll och inte finns i Windows-grupper, returnerar dbo alltid 0 (eller NULL om rollen inte finns).

För att avgöra om en annan SQL Server-inloggning är medlem i en databasroll, använd IS_ROLEMEMBER (Transact-SQL). För att avgöra om en SQL Server-inloggning är medlem i en serverroll, använd IS_SRVROLEMEMBER (Transact-SQL).

Examples

Följande exempel kontrollerar om den nuvarande användaren är medlem i en databasroll eller en Windows-domängrupp.

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

Se även

IS_SRVROLEMEMBER (Transact-SQL)
huvudnamn (databasmotor)
Säkerhetskatalogvyer (Transact-SQL)
Säkerhetsfunktioner (Transact-SQL)