IS_SRVROLEMEMBER (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Anger om en SQL Server-inloggning är medlem i den specificerade serverrollen.

Transact-SQL syntaxkonventioner

Syntax

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

Arguments

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

Giltiga värden för rollen är användardefinierade serverroller och följande fasta serverroller:

  • Sysadmin
  • serveradmin
  • dbcreator
  • setupadmin
  • Bulkadmin
  • säkerhetsadmin
  • diskadmin
  • offentligt
  • Processadmin

'login'
Är namnet på SQL Server-inloggningen att kontrollera. inloggning är sysname, med standardvärdet NULL. Om inget värde anges baseras resultatet på den aktuella exekveringskontexten. Om parametern innehåller ordet NULL, returnerar den NULL.

Anmärkning

Även om Microsoft Entra-inloggningar finns i offentlig förhandsvisning för Azure SQL Database och Azure Synapse, stöds inte användning av en Microsoft Entra-princip för inloggning .

Returtyper

int

Returvärde Description
0 Inloggning är inte en medlem av rollen.

I Azure SQL Database returnerar detta uttryck alltid 0.
1 Inloggning är medlem i Role.
NOLL Roll eller inloggning är inte giltigt, eller så har du inte behörighet att se rollmedlemskapet.

Anmärkningar

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

Om en Windows-inloggning, såsom Contoso\Mary5, anges för inloggning, returnerar IS_SRVROLEMEMBERNULL, om inte inloggningen har beviljats eller nekats direkt åtkomst till SQL Server.

Om den valfria inloggningsparametern inte anges och inloggningen är en Windows-domäninloggning, kan det vara medlem i en fast serverroll genom medlemskap i en Windows-grupp. För att lösa sådana indirekta medlemskap begär IS_SRVROLEMEMBER information om Windows-gruppmedlemskap från domänkontrollanten. Om domänkontrollanten är otillgänglig eller inte svarar returnerar IS_SRVROLEMEMBER 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_SRVROLEMEMBER skilja sig från autentisatorns (såsom Active Directory) senaste datauppdatering till SQL Server.

Om den valfria inloggningsparametern anges måste Windows-inloggningen som efterfrågas finnas i sys.server_principals, annars returnerar IS_SRVROLEMEMBER NULL. Detta indikerar att inloggningen inte är giltig.

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

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

IS_SRVROLEMEMBER returnerar alltid 0 när en Windows-grupp används som inloggningsargument, och denna Windows-grupp är medlem i en annan Windows-grupp som i sin tur är medlem i den specificerade serverrollen.

Inställningen User Account Control (UAC) kan också orsaka 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 sysadmin-fixserverrollen behörigheten CONTROL SERVER . Om användaren har behörigheten CONTROL SERVER men inte är medlem i rollen, kommer denna funktion korrekt att rapportera att användaren inte är medlem i sysadmin-rollen , även om användaren har samma behörigheter.

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 databasroll, använd IS_ROLEMEMBER (Transact-SQL).

Permissions

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

Examples

Följande exempel visar om SQL Server-inloggningen för den aktuella användaren är medlem av den sysadmin fasta serverrollen.

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

Följande exempel visar om domäninloggningen Pat är medlem i diskadmin-fixserverrollen .

SELECT IS_SRVROLEMEMBER('diskadmin', 'Contoso\Pat');  

Se även

IS_MEMBER (Transact-SQL)
Säkerhetsfunktioner (Transact-SQL)