Les différentes habilitations attribuées à un compte se connectant à une instance SQL Server se font via la notion de logins. Un login peut notamment être un compte Windows ou un groupe Windows.
Mais lorsque l’on se connecte, on le fait via un compte, qui peut lui-même appartenir à un ou plusieurs groupes. Alors que se passe-t-il, et quel login faut-il regarder pour connaitre nos habilitations ?
En fait, il faut regarder tous les logins qui peuvent nous correspondre :
– notre compte Windows s’il est directement spécifié
– chacun des groupes Windows auxquels notre compte appartient.
Ensuite, les habilitations sont cumulatives, c’est-à-dire que nous héritons de l’ensemble des droits de chacun des logins concernés.
A noter toutefois que les droits concernent des habilitations autorisées (GRANT) mais aussi des habilitations refusées (DENY).
Dans ce contexte, le refus aura toujours le dernier mot. Ainsi, si notre groupe (défini en tant que login) a une autorisation (GRANT) en lecture sur toutes les tables d’une base données, mais que notre compte personnel (lui-même identifié en tant que login) a un refus (DENY) sur une table en particulier, alors nous n’aurons pas accès à celle-ci.
Pour identifier l’ensemble des logins que l’on « consomme », il suffit d’utiliser la requête suivante :
SELECT name as [Login] from sys.server_principals where IS_MEMBER(name)=1
A noter que cet article ne considère que les logins définis au niveau de l’instance, mais pas les logins définis au niveau base de données (fonctionnalité apparue avec SQL Server 2012).