Partager via


IS_ROLEMEMBER (Transact-SQL)

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

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL

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, retourne NULL.

Types des valeurs retournées

int

Valeur de retour

Description

0

database_principal n'est pas membre de role.

1

database_principal est membre de role.

NULL

database_principal ou role n'est pas valide, ou vous ne disposez pas de l'autorisation nécessaire pour afficher l'appartenance au rôle.

Notes

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 un compte de connexion Windows, tel que Contoso\Mary5, IS_ROLEMEMBER retourne NULL, sauf si le 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 database_principal est une connexion de domaine Windows, il peut s'agir d'un membre du rôle de base de données via une 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 du domaine est inaccessible ou ne répond pas, IS_ROLEMEMBER retourne des informations sur l'appartenance au rôle, en prenant uniquement en considération l'utilisateur et ses groupes locaux. 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 de données de l'authentificateur (par exemple Active Directory) sur SQL Server.

Si le paramètre database_principal facultatif est fourni, le principal de la base de données interrogé doit être présent dans sys.database_principals, sinon IS_ROLEMEMBER retournera NULL. Cela indique que le database_principal n'est pas valide dans cette base de données.

Lorsque le paramètre database_principal est basé sur un compte de 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 retourner des données incorrectes ou incomplètes.

Si le contrôleur de domaine n'est pas accessible, l'appel à IS_ROLEMEMBER retourne des informations exactes lorsque le principal Windows peut être authentifié localement, par exemple un compte Windows local ou un compte de connexion SQL Server.

IS_ROLEMEMBER retourne toujours 0 lorsqu'un groupe Windows est utilisée comme argument de principal de base de données, et ce groupe Windows est membre d'un autre groupe Windows qui est, à son tour, un 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 retourner 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 possè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, bien qu'il dispose des mêmes autorisations.

Fonctions connexes

Pour déterminer si l'utilisateur actuel est membre du groupe Windows spécifié ou du rôle de base de données SQL Server, utilisez IS_MEMBER (Transact-SQL). Pour déterminer si un compte de 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

Référence

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)