Condividi tramite


IS_ROLEMEMBER (Transact-SQL)

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

Icona di collegamento a un argomento 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 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)