Récemment, j'ai utilisé EXECUTE AS LOGIN pour vérifier si une certaine personne pouvait ou ne pouvait pas utiliser une fonction de table dans l'une de nos bases de données. Les tests ont montré qu'il le pouvait mais il a signalé à plusieurs reprises un échec.
La personne utilise la connexion «WEB» pour se connecter à la base de données et l'utilisateur «WEB» dans cette base de données est associé à la connexion «WEB», j'ai donc essayé les scripts suivants:
-- part 1
EXECUTE AS USER = 'WEB'
GO
SELECT
USER_NAME() AS 'user_name'
,SUSER_NAME() AS 'suser_name'
,SUSER_SNAME() AS 'suser_sname'
,SYSTEM_USER AS 'system_user'
GO
REVERT
GO
et
-- part 2
EXECUTE AS LOGIN = 'WEB'
GO
SELECT
USER_NAME() AS 'user_name'
,SUSER_NAME() AS 'suser_name'
,SUSER_SNAME() AS 'suser_sname'
,SYSTEM_USER AS 'system_user'
GO
REVERT
GO
La première partie s'est bien passée avec le résultat de:
WEB | WEB | WEB | LA TOILE
Mais le deuxième résultat était un peu déroutant:
dbo | WEB | WEB | LA TOILE
Quelle est la différence entre EXECUTE AS USER et EXECUTE AS LOGIN qui fait échouer le second? En outre, bien sûr, le premier étant au niveau de la base de données et le second étant l'emprunt d'identité au niveau du serveur, de ce que je sais et n'explique pas la situation ici.