IS_ROLEMEMBER (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 en specificerad databashuvudperson är medlem i den angivna databasrollen.

Transact-SQL syntaxkonventioner

Anmärkning

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

Syntax

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

Arguments

'roll'
Är namnet på databasrollen som kontrolleras. rollen är sysname.

'database_principal'
Är namnet på databasanvändaren, databasrollen eller applikationsrollen som ska kontrolleras. database_principal är sysname, med standardvärdet NULL. Om inget värde anges baseras resultatet på den aktuella exekveringskontexten. Om parametern innehåller ordet NULL, kommer den att returnera NULL.

Returtyper

int

Returvärde Description
0 database_principal är inte medlem i rollen.
1 database_principal är en medlem av rollen.
NOLL database_principal eller roll är inte giltig, eller så har du inte tillstånd att se rollmedlemskapet.

Anmärkningar

Funktionen IS_ROLEMEMBER stöds inte för en Microsoft Entra-administratör när administratören är medlem i en Microsoft Entra-grupp. Funktionen IS_ROLEMEMBER stöds för Microsoft Entra-användare som är medlemmar i en Microsoft Entra-grupp, om inte den gruppen är Microsoft Entra-administratören.

Använd IS_ROLEMEMBER för att avgöra om den nuvarande användaren kan utföra en åtgärd som kräver databasrollens behörigheter.

Om database_principal baseras på en Windows-inloggning, såsom Contoso\Mary5, returnerar IS_ROLEMEMBER NULL, om inte database_principal har beviljats eller nekats direkt åtkomst till SQL Server.

Om den valfria database_principal-parametern inte finns och om database_principal baseras på en Windows-domäninloggning, kan den vara medlem i en databasroll genom medlemskap i en Windows-grupp. För att lösa sådana indirekta medlemskap begär IS_ROLEMEMBER information om Windows-gruppmedlemskap från domänkontrollanten. Om domänkontrollanten är otillgänglig eller inte svarar returnerar IS_ROLEMEMBER rollmedlemsinformation genom att endast ta hänsyn till användaren och dess lokala grupper. Om den angivna användaren inte är den nuvarande användaren kan värdet som returneras av IS_ROLEMEMBER skilja sig från autentisatorns (såsom Active Directory) senaste datauppdatering till SQL Server.

Om den valfria database_principal-parametern tillhandahålls måste användaren existera i sys.database_principals, annars returnerar IS_ROLEMEMBER NULL.

När database_principal-parametern baseras på en domäninloggning eller en Windows-grupp och domänkontrollanten är otillgänglig, kommer anrop till IS_ROLEMEMBER att misslyckas och kan returnera felaktig eller ofullständig data.

Om domänkontrollanten inte är tillgänglig returnerar anropet till IS_ROLEMEMBER korrekt information när Windows-principen kan autentiseras lokalt, såsom ett lokalt Windows-konto eller en SQL Server-inloggning.

IS_ROLEMEMBER returnerar alltid 0 när en Windows-grupp används som databasens huvudargument, och denna Windows-grupp är medlem i en annan Windows-grupp som i sin tur är medlem i den specificerade databasrollen.

User Account Control (UAC) som finns i Windows Vista och Windows Server 2008 kan också ge olika resultat. Detta beror på om användaren har tillgång till servern som medlem i Windows-gruppen eller som en specifik SQL Server-användare.

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 den nuvarande användaren är medlem i den specificerade Windows-gruppen, Microsoft Entra-gruppen eller SQL Server-databasrollen, använd IS_MEMBER (Transact-SQL). För att avgöra om en SQL Server-inloggning är medlem i en serverroll, använd IS_SRVROLEMEMBER (Transact-SQL).

Permissions

Kräver behörighet VIEW DEFINITION på databasrollen.

Examples

Följande exempel visar om den nuvarande användaren är medlem i den db_datareader fasta databasrollen.

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

Se även

SKAPA ROLL (Transact-SQL)
ALTER ROLL (Transact-SQL)
DROPPROLL (Transact-SQL)
SKAPA SERVERROLL (Transact-SQL)
ALTER SERVER ROLL (Transact-SQL)
DROP SERVER-ROLL (Transact-SQL)
IS_MEMBER (Transact-SQL)
IS_SRVROLEMEMBER (Transact-SQL)
Säkerhetsfunktioner (Transact-SQL)