Partage via


IS_MEMBER (Transact-SQL)

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

Indique si l’utilisateur actuel est membre du groupe Microsoft Windows, du groupe Microsoft Entra ou du rôle de base de données SQL Server spécifié.

La fonction IS_MEMBER est prise en charge pour les groupes Microsoft Entra. Le cas où IS_MEMBER ne fonctionne pas est si le groupe est l’administrateur Microsoft Entra pour l’instance SQL.

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_MEMBER ( { 'group' | 'role' } )  

Arguments

' group '
S’applique à : SQL Server 2008 (10.0.x) et versions ultérieures

Nom du groupe Windows ou Microsoft Entra en cours de vérification. Un groupe Windows doit être au format Groupe de domaine\. group est de type sysname.

' role '
Nom du rôle SQL Server en cours de vérification. role est de type sysname et peut comprendre les rôles de base de données fixes ou définis par l’utilisateur, mais pas les rôles de serveur.

Types de retour

int

Notes

IS_MEMBER retourne les valeurs suivantes.

Valeur retournée Description
0 L’utilisateur actuel n’est pas membre d’un groupe ou d’un rôle.
1 L’utilisateur actuel est membre de group ou de role.
NULL Le groupe ou le rôle n’est pas valide. En cas d'interrogation par une connexion SQL Server ou une connexion utilisant un rôle d'application, retourne NULL pour un groupe Windows.

IS_MEMBER détermine l'appartenance au groupe Windows en examinant un jeton d'accès créé par Windows. Le jeton d’accès ne reflète pas les modifications apportées à l’appartenance à un groupe après la connexion d’un utilisateur à une instance de SQL Server. L’appartenance au groupe Windows ne peut pas être interrogée par une connexion SQL Server ou un rôle d’application SQL Server.

Pour ajouter et supprimer des membres dans un rôle de base de données, utilisez ALTER ROLE (Transact-SQL). Pour ajouter et supprimer des membres dans un rôle de serveur, utilisez ALTER SERVER ROLE (Transact-SQL).

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 une autre connexion SQL Server est membre d’un rôle de base de données, utilisez IS_ROLEMEMBER (Transact-SQL). Pour déterminer si une connexion SQL Server est membre d’un rôle de serveur, utilisez IS_SRVROLEMEMBER (Transact-SQL).

Exemples

L'exemple suivant vérifie si l'utilisateur actuel est membre d'un rôle de base de données ou d'un groupe de domaines Windows.

-- Test membership in db_owner and print appropriate message.  
IF IS_MEMBER ('db_owner') = 1  
   PRINT 'Current user is a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') = 0  
   PRINT 'Current user is NOT a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') IS NULL  
   PRINT 'ERROR: Invalid group / role specified';  
GO  
  
-- Execute SELECT if user is a member of ADVWORKS\Shipping.  
IF IS_MEMBER ('ADVWORKS\Shipping') = 1  
   SELECT 'User ' + USER + ' is a member of ADVWORKS\Shipping.';   
GO  

Voir aussi

IS_SRVROLEMEMBER (Transact-SQL)
Principaux (moteur de base de données)
Affichages catalogue liées à la sécurité (Transact-SQL)
Fonctions de sécurité (Transact-SQL)