IS_SRVROLEMEMBER (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

Indica se un account di accesso di SQL Server è un membro del ruolo del server specificato.

Convenzioni di sintassi Transact-SQL

Sintassi

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

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

'role'
Nome del ruolo del server sottoposto al controllo. role è di tipo sysname.

I valori validi per role sono i ruoli del server definiti dall'utente e i ruoli predefiniti del server seguenti:

  • sysadmin
  • serveradmin
  • dbcreator
  • setupadmin
  • bulkadmin
  • securityadmin
  • diskadmin
  • public
  • processadmin

'login'
Nome dell'account di accesso di SQL Server da controllare. login è di tipo sysname e il valore predefinito è NULL. Se non si specifica alcun valore, il risultato sarà basato sul contesto di esecuzione corrente. Se il parametro contiene la parola NULL, restituisce NULL.

Nota

Anche se gli account di accesso di Microsoft Entra sono in anteprima pubblica per database SQL di Azure e Azure Synapse, l'uso di un'entità di accesso Microsoft Entra per l'accesso non è supportato.

Tipi restituiti

int

Valore restituito Descrizione
0 login non è un membro del ruolo.

Nel database SQL di Azure questa istruzione restituisce sempre 0.
1 login è membro di role.
NULL il ruolo o l'account di accesso non è valido oppure non si dispone dell'autorizzazione per visualizzare l'appartenenza al ruolo.

Osservazioni:

Usare IS_SRVROLEMEMBER per determinare se l'utente corrente può eseguire un'azione che richiede le autorizzazioni del ruolo del server.

Se per login viene specificato un account di accesso di Windows, ad esempio Contoso\Mary5, IS_SRVROLEMEMBER restituisce NULL, a meno che all'account di accesso non sia stato concesso o negato l'accesso diretto a SQL Server.

Se il parametro di accesso facoltativo non viene specificato e se l'account di accesso è un account di accesso di Windows, può essere membro di un ruolo predefinito del server tramite l'appartenenza a un gruppo di Windows. Per risolvere tali problemi di appartenenza indiretta, IS_SRVROLEMEMBER richiede le informazioni di appartenenza ai gruppi di Windows al controller di dominio. Se il controller di dominio non è accessibile o non risponde, IS_SRVROLEMEMBER restituisce informazioni sull'appartenenza al ruolo tenendo conto solo dell'utente e dei relativi gruppi locali. Se l'utente specificato non è l'utente corrente, il valore restituito da IS_SRVROLEMEMBER potrebbe differire dall'ultimo aggiornamento dei dati dell'autenticatore (ad esempio Active Directory) a SQL Server.

Se viene specificato il parametro di accesso facoltativo, l'account di accesso di Windows sottoposto a query deve essere presente in sys.server_principals oppure IS_SRVROLEMEMBER restituisce NULL. Ciò indica che l'account di accesso non è valido.

Quando il parametro di accesso è un account di accesso di dominio o è basato su un gruppo di Windows e il controller di dominio non è accessibile, le chiamate a IS_SRVROLEMEMBER hanno esito negativo e possono restituire dati errati o incompleti.

Se il controller di dominio non è disponibile, la chiamata a IS_SRVROLEMEMBER restituisce informazioni accurate quando l'entità di windows può essere autenticata in locale, ad esempio un account di Windows locale o un account di accesso di SQL Server.

IS_SRVROLEMEMBER restituisce sempre 0 quando viene usato un gruppo di Windows come argomento di accesso e questo gruppo è membro di un altro gruppo di Windows che, a sua volta, è membro del ruolo del server specificato.

L'impostazione Controllo dell'account utente può inoltre determinare la restituzione di risultati diversi. Questo dipende dal fatto che l'utente acceda al server come membro di un gruppo di Windows o come utente di SQL Server specifico.

Questa funzione valuta l'appartenenza al ruolo, non l'autorizzazione sottostante. Il ruolo predefinito del server sysadmin, ad esempio, ha l'autorizzazione CONTROL SERVER. Se l'utente dispone dell'autorizzazione CONTROL edizione Standard RVER ma non è membro del ruolo, questa funzione segnala correttamente che l'utente non è membro del ruolo sysadmin, anche se l'utente ha le stesse autorizzazioni.

Per determinare se l'utente corrente è membro del gruppo di Windows, del gruppo Microsoft Entra o del ruolo del database di SQL Server specificato, utilizzare IS_MEMBER (Transact-SQL). Per determinare se un account di accesso di SQL server è membro di un ruolo del database, usare IS_ROLEMEMBER (Transact-SQL).

Autorizzazioni

È richiesta l'autorizzazione VIEW DEFINITION per il ruolo del server.

Esempi

Nell'esempio seguente viene indicato se l'account di accesso di SQL Server per l'utente corrente è un membro del ruolo predefinito del server sysadmin.

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

Nell'esempio seguente viene indicato se l'account di accesso del dominio Pat è un membro del ruolo predefinito del server diskadmin.

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

Vedi anche

IS_MEMBER (Transact-SQL)
Funzioni di sicurezza (Transact-SQL)