IS_ROLEMEMBER (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

Indica se un'entità di sicurezza del database specificata è un membro del ruolo del database specificato.

Convenzioni relative alla sintassi Transact-SQL

Nota

Microsoft Entra ID era precedentemente conosciuto come Azure Active Directory (Azure AD).

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 è membro del ruolo.
1 database_principal è membro di role.
NULL database_principal o ruolo non è valido o non si dispone dell'autorizzazione per visualizzare l'appartenenza al ruolo.

Osservazioni:

La funzione IS_ROLEMEMBER non è supportata per un amministratore di Microsoft Entra quando l'amministratore è membro di un gruppo Microsoft Entra. La funzione IS_ROLEMEMBER è supportata per gli utenti di Microsoft Entra membri di un gruppo Microsoft Entra, a meno che tale gruppo non sia l'amministratore di Microsoft Entra.

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 il parametro facoltativo database_principal non viene specificato e se il database_principal è basato su un account di accesso al dominio di Windows, può essere 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 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_ROLEMEMBER potrebbe differire dall'ultimo aggiornamento dei dati dell'autenticatore (ad esempio Active Directory) a SQL Server.

Se viene specificato il parametro facoltativo database_principal , l'utente deve esistere in sys.database_principals oppure IS_ROLEMEMBER restituisce NULL.

Quando il parametro database_principal si basa su un account di accesso a un 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 in locale, ad esempio un account di Windows locale o un account di accesso di SQL Server.

IS_ROLEMEMBER restituisce sempre 0 quando viene usato un gruppo di Windows come argomento dell'entità di database e questo gruppo è membro di un altro gruppo di Windows che, a sua volta, è membro del ruolo del database specificato.

La funzionalità Controllo dell'account utente disponibile in Windows Vista e Windows Server 2008 può inoltre restituire 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 database db_owner dispone ad esempio dell'autorizzazione CONTROL DATABASE. Se l'utente dispone dell'autorizzazione CONTROL DATABASE ma non è membro del ruolo, questa funzione segnala correttamente che l'utente non è membro del ruolo db_owner , anche se l'utente ha le stesse autorizzazioni.

I membri del ruolo predefinito del server sysadmin accedono a ogni database come utenti dbo. Durante la verifica dell'autorizzazione di membro del ruolo predefinito del server sysadmin vengono controllate le autorizzazioni per dbo, non l'account di accesso originale. Poiché dbo non può essere aggiunto a un ruolo del database e non esiste nei gruppi di Windows, dbo restituisce sempre 0 (o NULL se il ruolo non esiste).

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 server, usare 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.';  

Vedi anche

CREATE ROLE (Transact-SQL)
ALTER ROLE (Transact-SQL)
DROP ROLE (Transact-SQL)
CREATE SERVER ROLE (Transact-SQL)
ALTER SERVER ROLE (Transact-SQL)
DROP SERVER ROLE (Transact-SQL)
IS_MEMBER (Transact-SQL)
IS_SRVROLEMEMBER (Transact-SQL)
Funzioni di sicurezza (Transact-SQL)