IS_SRVROLEMEMBER (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

Indique si une connexion SQL Server est membre du rôle serveur spécifié.

Conventions de la syntaxe Transact-SQL

Syntaxe

IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )  

Arguments

' role '
Nom du rôle de serveur vérifié. role est de type sysname.

Les valeurs valides pour role sont des rôles serveur définis par l’utilisateur, et les rôles serveur fixes suivants :

  • administrateur système
  • serveradmin
  • dbcreator
  • setupadmin
  • bulkadmin
  • securityadmin
  • diskadmin
  • public
  • processadmin

' login '
Nom du compte de connexion SQL Server à vérifier. login 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.

Remarque

Bien que les connexions Microsoft Entra soient en préversion publique pour Azure SQL Database et Azure Synapse, l’utilisation d’un principal Microsoft Entra pour la connexion n’est pas prise en charge.

Types de retour

int

Valeur retournée Description
0 la connexion n’est pas membre du rôle.

Dans Azure SQL Database, cette instruction retourne toujours 0.
1 login est membre de role.
NULL le rôle ou la connexion n’est pas valide, ou vous n’êtes pas autorisé à afficher l’appartenance au rôle.

Notes

Utilisez IS_SRVROLEMEMBER pour déterminer si l’utilisateur actuel peut effectuer une action nécessitant les autorisations du rôle serveur.

Si une connexion Windows, telle que Contoso\Mary5, est spécifiée pour login, IS_SRVROLEMEMBER retourne NULL à moins de s’être vu attribuer ou refuser l’accès direct à SQL Server.

Si le paramètre de connexion facultatif n’est pas fourni et si la connexion est une connexion de domaine Windows, il peut être membre d’un rôle serveur fixe via l’appartenance à un groupe Windows. Pour résoudre de telles appartenances indirectes, IS_SRVROLEMEMBER 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_SRVROLEMEMBER retourne les informations d’appartenance aux rôles en tenant 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_SRVROLEMEMBER 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 de connexion facultatif est fourni, la connexion Windows interrogée doit être présente dans sys.server_principals, ou IS_SRVROLEMEMBER retourne NULL. Cela indique que la connexion n’est pas valide.

Lorsque le paramètre de connexion est un compte de connexion de domaine ou lorsqu'il est basé sur un groupe Windows et que le contrôleur de domaine n'est pas accessible, les appels à IS_SRVROLEMEMBER échouent et peuvent retourner des données incorrectes ou incomplètes.

Si le contrôleur de domaine n’est pas disponible, l’appel à IS_SRVROLEMEMBER 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_SRVROLEMEMBER retourne toujours 0 lorsqu’un groupe Windows est utilisé comme argument de connexion et que ce groupe Windows est membre d’un autre groupe Windows qui est, à son tour, membre du rôle serveur spécifié.

Le paramètre de contrôle de compte d’utilisateur (UAC) peut entraîner le renvoi de 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 serveur fixe sysadmin dispose de l’autorisation CONTROL SERVER. Si l’utilisateur dispose de l’autorisation CONTROL SERVER mais n’est pas membre du rôle, cette fonction signale correctement que l’utilisateur n’est pas membre du rôle sysadmin , même si l’utilisateur dispose des mêmes autorisations.

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 base de données, utilisez IS_ROLEMEMBER (Transact-SQL).

Autorisations

Nécessite l'autorisation VIEW DEFINITION sur le rôle de serveur.

Exemples

L’exemple suivant indique si le compte de connexion SQL Server de l’utilisateur actuel est membre du rôle serveur fixe sysadmin.

IF IS_SRVROLEMEMBER ('sysadmin') = 1  
   print 'Current user''s login is a member of the sysadmin role'  
ELSE IF IS_SRVROLEMEMBER ('sysadmin') = 0  
   print 'Current user''s login is NOT a member of the sysadmin role'  
ELSE IF IS_SRVROLEMEMBER ('sysadmin') IS NULL  
   print 'ERROR: The server role specified is not valid.';  

L’exemple suivant indique si la connexion de domaine Pat est un membre du rôle serveur fixe diskadmin.

SELECT IS_SRVROLEMEMBER('diskadmin', 'Contoso\Pat');  

Voir aussi

IS_MEMBER (Transact-SQL)
Fonctions de sécurité (Transact-SQL)