Condividi tramite


IS_SRVROLEMEMBER (Transact-SQL)

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

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

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

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

    sysadmin

    serveradmin

    dbcreator

    setupadmin

    bulkadmin

    securityadmin

    diskadmin

    public

    processadmin

     

  • ' 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. Se nel parametro è inclusa la parola NULL, verrà restituito NULL.

Tipi restituiti

int

Valore restituito

Descrizione

0

login non è un membro di role.

1

login è un membro di role.

NULL

role o login non è valido o non si dispone dell'autorizzazione per visualizzare l'appartenenza al ruolo.

Osservazioni

Utilizzare IS_SRVROLEMEMBER 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, 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 login facoltativo non viene fornito e login è 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 viene fornito il parametro per l'account di accesso facoltativo, l'account di accesso di Windows su cui vengono eseguite query deve essere presente in sys.server_principals. In caso contrario, IS_SRVROLEMEMBER restituisce NULL. 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.

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

La funzionalità Controllo dell'account utente (UAC) di Windows Vista e Windows Server 2008 potrebbe restituire anche risultati diversi. Ciò potrebbe dipendere dal tipo di accesso che l'utente ha effettuato al server, come membro del gruppo di Windows o come utente SQL Server specifico.

Questa funzione valuta 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 è membro del ruolo, questa funzione indicherà correttamente che l'utente non è membro del ruolo sysadmin, anche se dispone delle stesse autorizzazioni.

Funzioni correlate

Per determinare se l'utente corrente è membro del gruppo di Windows o del ruolo del database di SQL Server specificato, utilizzare IS_MEMBER (Transact-SQL). Per determinare se un account di accesso di SQL Server è un membro di un ruolo del database, utilizzare 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');

Vedere anche

Riferimento

IS_MEMBER (Transact-SQL)

Funzioni di sicurezza (Transact-SQL)