IS_SRVROLEMEMBER (Transact-SQL)
Indica se un account di accesso di SQL Server è un membro del ruolo predefinito del server specificato.
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. Se è inclusa la parola NULL, verrà restituito NULL.
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, 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 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 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 dell'account di accesso e tale gruppo di Windows è membro di un altro gruppo di Windows, a sua volta membro del ruolo del server specificato.
È probabile che il Controllo dell'account utente (UAC) trovato in Windows Vista e Windows Server 2008 restituiscano anche risultati diversi. Ciò potrebbe dipendere dal fatto che l'utente ha eseguito l'accesso al server come membro del gruppo di Windows o come utente SQL Server specifico. Per ulteriori informazioni sulla funzionalità Controllo dell'account utente, vedere Procedura: Connessione a SQL Server da Windows Vista.
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.
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.'
Vedere anche