Partager via


IS_SRVROLEMEMBER (Transact-SQL)

Indique si une connexion SQL Server appartient au rôle serveur fixe spécifié.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

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

Arguments

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

    Les valeurs valides pour role sont les suivantes :

    • sysadmin

    • dbcreator

    • bulkadmin

    • diskadmin

    • processadmin

    • serveradmin

    • setupadmin

    • securityadmin

  • 'login'
    Nom de la connexion SQL Server à vérifier. login est de type sysname et NULL est la valeur par défaut. Si aucune valeur n'est spécifiée, le résultat sera basé sur le contexte d'exécution actuel. S'il contient le mot NULL, la valeur NULL est retournée.

Types de retour

int

Notes

IS_SRVROLEMEMBER retourne les valeurs suivantes :

Valeur de retour

Description

0

login n'est pas membre de role.

1

login est membre de role.

NULL

role ou login est incorrect.

Utilisez cette fonction pour déterminer si l'utilisateur actuel peut réaliser une action nécessitant les autorisations du rôle de 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 un domaine Windows, il peut s'agir d'un membre du rôle serveur fixe via une 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 du domaine est inaccessible ou ne répond pas, IS_SRVROLEMEMBER 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_SRVROLEMEMBER peut différer de la dernière actualisation de données de l'authentificateur (par exemple Active Directory) sur SQL Server.

Si le paramètre de connexion facultatif est fourni, la connexion Windows interrogée doit être présente dans sys.server_principals, sinon IS_SRVROLEMEMBER retourne la valeur NULL. Cela indique que la connexion n'est pas valide.

Lorsque le paramètre de connexion est une 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 accessible, l'appel à IS_SRVROLEMEMBER retourne des informations exactes lorsque le principe Windows peut être authentifié localement, par exemple 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 ce groupe Windows est membre d'un autre groupe Windows qui est, à son tour, membre du rôle serveur spécifié.

Le contrôle de compte d'utilisateur (UAC) dans Windows Vista et Windows Server 2008 peut également retourner des résultats différents. Cela dépend de si l'utilisateur a accédé au serveur en tant que membre du groupe Windows ou en tant qu'un utilisateur SQL Server spécifique. Pour plus d'informations sur le contrôle de compte d'utilisateur, consultez Procédure : Se connecter à SQL Server depuis Windows Vista.

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 possède l'autorisation CONTROL SERVER, mais n'est pas membre du rôle, cette fonction signalera correctement que l'utilisateur n'est pas membre du rôle sysadmin, bien que l'utilisateur dispose des mêmes autorisations.

Exemples

L'exemple suivant indique si la connexion SQL Server pour 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.'