IS_SRVROLEMEMBER (Transact-SQL)

Viene indicato se un account di accesso di SQL Server è un membro del ruolo predefinito del server specificato.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • 'role'
    Nome del ruolo del server sottoposto al controllo. role corrisponde a sysname.

    I valori validi per role includono i seguenti:

    sysadmin

    • dbcreator

    • bulkadmin

    • diskadmin

    • processadmin

    • serveradmin

    • setupadmin

    • securityadmin

  • 'login'
    Nome dell'account di accesso di SQL Server da controllare. login corrisponde a sysname e il valore predefinito è NULL. Se non si specifica alcun valore, il risultato sarà basato sul contesto di esecuzione corrente.

Tipi restituiti

int

Osservazioni

IS_SRVROLEMEMBER restituisce i valori seguenti:

Valore restituito

Descrizione

0

login non è un membro di role.

1

login è un membro di role.

NULL

role o login non è valido.

Utilizzare questa funzione per determinare se l'utente corrente è in grado di eseguire un'azione che richiede le autorizzazioni di un ruolo del server.

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

Se il parametro per l'account di accesso facoltativo non viene fornito e l'account di accesso è un account di domino di Windows, potrebbe essere un 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 le informazioni di appartenenza ai ruoli prendendo in considerazione solo l'utente e i gruppi locali. Se l'utente specificato non è l'utente corrente, il valore restituito da IS_SRVROLEMEMBER potrebbe essere diverso dall'ultimo aggiornamento dei dati dell'autenticatore, ad esempio Active Directory, in SQL Server.

Se il parametro per l'account di accesso facoltativo viene fornito, l'account di accesso di Windows su cui vengono eseguite query deve essere presente in sys.server_principals. In caso contrario, verrà restituito NULL da IS_SRVROLEMEMBER. Questo valore 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 localmente, ad esempio come account Windows locale o come account di accesso di SQL Server.

La funzionalità Controllo dell'account utente (UAC) di Windows Vista e Windows Server 2008 potrebbe restituire anche risultati diversi. Questo dipende dal fatto che l'utente accede al server come membro di un gruppo di Windows o come utente di SQL Server specifico. Per ulteriori informazioni sulla funzionalità Controllo dell'account utente, vedere Procedura: Connessione a SQL Server da Windows Vista.

Questa funzione consente di verificare l'appartenenza al ruolo, non l'autorizzazione sottostante. Ad esempio, il ruolo predefinito del server sysadmin dispone dell'autorizzazione CONTROL SERVER. Se l'utente dispone dell'autorizzazione CONTROL SERVER ma non è un membro del ruolo, questa funzione segnalerà correttamente che l'utente non è un membro del ruolo sysadmin, anche se dispone delle stesse autorizzazioni.

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