T-SQL: SUSER_SNAME vs SUSER_NAME?
La documentation MSDN dit pour SUSER_SNAME fonction:
Retourne le login nom d'identification d'un utilisateur du numéro d'identification de sécurité (SID).
De plus, il est dit pour la SUSER_NAME fonction:
Retourne le login nom d'identification de l'utilisateur.
Néanmoins, lorsque j'exécute les instructions SQL suivantes-je obtenir le même résultat:
SELECT SUSER_NAME();
SELECT SUSER_SNAME();
Alors, quelles sont les différences, et que l'on doit-je utiliser? Il existe une situation que je devrais utiliser l'un plutôt que l'autre?
S'il vous plaît conseils,
Merci d'avance 🙂
Vous devez vous connecter pour publier un commentaire.
Si vous appelez la fonction sans argument ils reviennent tous les deux la même valeur. Mais ils ne prennent des arguments différents:
varbinary(85) SID
de connexion comme argumentinteger principal_id
d'une connexionVous pouvez le vérifier comme:
Seulement la première et la dernière colonne sera de retour les valeurs non null.
SUSER_NAME
accepte à la fois lesprincipal_id
etsid
. Par la façon dont je suis l'aide de SQL Server 2012 si ce qui compte.null
. Il y a peut être un cas de coin oùcast(sid as int)
équivaut à unprincipal_id
, mais c'est hautement improbableselect sid,principal_id, CONVERT(int,sid) SidConverted , suser_name(principal_id) NamePid , suser_name(sid) NameSid , suser_sname(principal_id) SnamePid , suser_sname(sid) SnameSid from sys.server_principals
. Chaque fois que principal_id et SidConverted sont égaux, NameSid aura une valeur. Je suppose que lors de l'utilisation desuser_name(sid)
, le sid est implicitement converti en int.SUSER_NAME() retourne le nom associé à un sid qui existe dans sys.server_principals. Le sid doit exister dans sys.server_principals.
SUSER_SNAME() peut le faire, mais peut aussi retourner le sid d'une connexion si la connexion est membre d'un groupe active directory
Donc si vous avez [CONTOSO\MyGroup] dans Active Directory et que le groupe a un utilisateur [CONTOSO\MyUser]
Et vous ajoutez que le groupe de SQL Server:
CREATE LOGIN [CONTOSO\MyGroup] à PARTIR de WINDOWS;
SÉLECTIONNEZ SUSER_ID('CONTOSO\MyUser'), SUSER_SID('CONTOSO\MyUser')
vous donnera
NULL, CONTOSO\MyUser
parce que CONTOSO\MyUser n'est pas dans sys.server_principals mais il est dans Un/D