IS_ROLEMEMBER (Transact-SQL)
Indica se un'entità di database specificata è un membro del ruolo del database specificato.
Convenzioni della sintassi Transact-SQL
Sintassi
IS_ROLEMEMBER ( 'role' [ , 'database_principal' ] )
Argomenti
' role '
Nome del ruolo del database sottoposto al controllo. role è di tipo sysname.' database_principal '
Nome dell'utente o ruolo del database o del ruolo applicazione da controllare. database_principal è di tipo 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 |
database_principal non è un membro di role. |
1 |
database_principal è un membro di role. |
NULL |
database_principal o role non è valido o non si dispone dell'autorizzazione per visualizzare l'appartenenza al ruolo. |
Osservazioni
Utilizzare IS_ROLEMEMBER per determinare se l'utente corrente è in grado di eseguire un'azione che richiede le autorizzazioni del ruolo del database.
Se database_principal si basa su un account di accesso di Windows, ad esempio Contoso\Mary5, IS_ROLEMEMBER restituisce NULL, a meno che a database_principal non sia stato concesso o negato l'accesso diretto a SQL Server.
Se non viene fornito il parametro database_principal facoltativo e database_principal si basa su un account di domino di Windows, potrebbe essere un membro di un ruolo del database tramite l'appartenenza a un gruppo di Windows. Per risolvere tali problemi di appartenenza indiretta, IS_ROLEMEMBER richiede le informazioni di appartenenza ai gruppi di Windows al controller di dominio. Se il controller di dominio non è accessibile o non risponde, IS_ROLEMEMBER 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_ROLEMEMBER potrebbe essere diverso dall'ultimo aggiornamento dei dati dell'autenticatore, ad esempio Active Directory, in SQL Server.
Se viene fornito il parametro database_principal facoltativo, l'entità database su cui viene eseguita la query deve essere presente in sys.database_principals. In caso contrario, IS_ROLEMEMBER restituisce NULL. Questo valore indica che database_principal non è valida in questo database.
Quando il parametro database_principal si basa su un account di accesso di dominio o su un gruppo di Windows e il controller di dominio non è accessibile, le chiamate a IS_ROLEMEMBER hanno esito negativo e possono restituire dati errati o incompleti.
Se il controller di dominio non è disponibile, la chiamata a IS_ROLEMEMBER 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_ROLEMEMBER restituisce sempre 0 quando viene utilizzato un gruppo di Windows come argomento dell'entità di database e tale gruppo è membro di un altro gruppo di Windows che, a sua volta, è membro del ruolo del database specificato.
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 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. Ad esempio, il ruolo predefinito del database db_owner dispone dell'autorizzazione CONTROL DATABASE. Se l'utente dispone dell'autorizzazione CONTROL DATABASE ma non è membro del ruolo, questa funzione indicherà correttamente che l'utente non è membro del ruolo db_owner, anche se dispone delle stesse autorizzazioni.
Funzioni correlate
Per determinare se l'utente corrente è membro del gruppo di Windows o del ruolo di 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 server, utilizzare IS_SRVROLEMEMBER (Transact-SQL).
Autorizzazioni
È richiesta l'autorizzazione VIEW DEFINITION per il ruolo del database.
Esempi
Nell'esempio seguente viene indicato se l'utente corrente è un membro del ruolo predefinito del database db_datareader.
IF IS_ROLEMEMBER ('db_datareader') = 1
print 'Current user is a member of the db_datareader role'
ELSE IF IS_ROLEMEMBER ('db_datareader') = 0
print 'Current user is NOT a member of the db_datareader role'
ELSE IF IS_ROLEMEMBER ('db_datareader') IS NULL
print 'ERROR: The database role specified is not valid.'
Vedere anche
Riferimento
CREATE SERVER ROLE (Transact-SQL)
ALTER SERVER ROLE (Transact-SQL)
DROP SERVER ROLE (Transact-SQL)