Partage via


IS_ROLEMEMBER (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Indique si un principal de base de données spécifié est membre du rôle de base de données spécifié.

Conventions de la syntaxe Transact-SQL

Remarque

Microsoft Entra ID était précédemment connu sous le nom d’Azure Active Directory (Azure AD).

Syntaxe

IS_ROLEMEMBER ( 'role' [ , 'database_principal' ] )  

Arguments

' role '
Nom du rôle de base de données vérifié. role est de type sysname.

' database_principal '
Nom de l'utilisateur de base de données, du rôle de base de données ou du rôle d'application à vérifier. database_principal est de type sysname, avec NULL comme valeur par défaut. Si aucune valeur n'est spécifiée, le résultat est basé sur le contexte d'exécution actuel. Si le paramètre contient le mot NULL, il retourne NULL.

Types de retour

int

Valeur retournée Description
0 database_principal n’est pas membre du rôle.
1 database_principal est un membre de role.
NULL database_principal ou le rôle n’est pas valide, ou vous n’êtes pas autorisé à afficher l’appartenance au rôle.

Notes

La fonction IS_ROLEMEMBER n’est pas prise en charge pour un administrateur Microsoft Entra lorsque l’administrateur est membre d’un groupe Microsoft Entra. La fonction IS_ROLEMEMBER est prise en charge pour les utilisateurs Microsoft Entra membres d’un groupe Microsoft Entra, sauf si ce groupe est l’administrateur Microsoft Entra.

Utilisez IS_ROLEMEMBER pour déterminer si l'utilisateur actuel peut réaliser une action nécessitant les autorisations du rôle de base de données.

Si database_principal est basé sur une connexion Windows, telle que Contoso\Mary5, IS_ROLEMEMBER retourne NULL, sauf si database_principal s’est vu accorder ou refuser l’accès direct à SQL Server.

Si le paramètre database_principal facultatif n’est pas fourni et si l’database_principal est basé sur une connexion de domaine Windows, il peut être membre d’un rôle de base de données via l’appartenance à un groupe Windows. Pour résoudre de telles appartenances indirectes, IS_ROLEMEMBER demande des informations sur l'appartenance au groupe Windows à partir du contrôleur du domaine. Si le contrôleur de domaine n’est pas accessible ou ne répond pas, IS_ROLEMEMBER retourne les informations d’appartenance aux rôles en rendant compte de l’utilisateur et de ses groupes locaux uniquement. Si l’utilisateur spécifié n’est pas l’utilisateur actuel, la valeur retournée par IS_ROLEMEMBER peut différer de la dernière mise à jour des données de l’authentificateur (par exemple Active Directory) vers SQL Server.

Si le paramètre database_principal facultatif est fourni, l’utilisateur doit exister dans sys.database_principals, ou IS_ROLEMEMBER retourne NULL.

Lorsque le paramètre database_principal est basé sur une connexion de domaine ou sur un groupe Windows et que le contrôleur de domaine n’est pas accessible, les appels à IS_ROLEMEMBER échouent et peuvent renvoyer des données incorrectes ou incomplètes.

Si le contrôleur de domaine n’est pas disponible, l’appel à IS_ROLEMEMBER retourne des informations précises lorsque le principal Windows peut être authentifié localement, tel qu’un compte Windows local ou une connexion SQL Server.

IS_ROLEMEMBER retourne toujours 0 lorsqu’un groupe Windows est utilisé comme argument de principal de base de données, et ce groupe Windows est membre d’un autre groupe Windows qui est, à son tour, membre du rôle de base de données spécifié.

Le contrôle de compte d’utilisateur trouvé dans Windows Vista et Windows Server 2008 peut également renvoyer des résultats différents. Cela varie selon que l'utilisateur a accédé au serveur en tant que membre de groupe Windows ou en tant qu'utilisateur SQL Server spécifique.

Cette fonction évalue l'appartenance au rôle, et non l'autorisation sous-jacente. Par exemple, le rôle de base de données fixe db_owner dispose de l’autorisation CONTROL DATABASE. Si l’utilisateur dispose de l’autorisation CONTROL DATABASE mais n’est pas membre du rôle, cette fonction signale correctement que l’utilisateur n’est pas membre du rôle db_owner , même si l’utilisateur dispose des mêmes autorisations.

Les membres du rôle de serveur fixe sysadmin se connectent comme utilisateur dbo dans toutes les bases de données. La vérification de l’autorisation pour le membre du rôle de serveur fixe sysadmin vérifie les autorisations pour dbo, et pas pour le compte de connexion d’origine. Étant donné que dbo ne peut pas être ajouté à un rôle de base de données et n’existe pas dans les groupes Windows, dbo retourne toujours 0 (ou NULL si le rôle n’existe pas).

Pour déterminer si l’utilisateur actuel est membre du groupe Windows, du groupe Microsoft Entra ou du rôle de base de données SQL Server spécifié, utilisez IS_MEMBER (Transact-SQL) . Pour déterminer si une connexion SQL Server est membre d’un rôle de serveur, utilisez IS_SRVROLEMEMBER (Transact-SQL).

Autorisations

Requiert l'autorisation VIEW DEFINITION sur le rôle de base de données.

Exemples

L'exemple suivant indique si l'utilisateur actuel est membre du rôle de base de données fixe 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.';  

Voir aussi

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)
Fonctions de sécurité (Transact-SQL)