Recentemente ho usato EXECUTE AS LOGIN per verificare se una determinata persona poteva o non poteva usare una funzione di tabella in uno dei nostri database. I test hanno dimostrato che poteva, ma ha ripetutamente segnalato un fallimento.
La persona usa il login "WEB" per connettersi al database e ha l'utente "WEB" in quel database associato al login "WEB", quindi ho provato i seguenti script:
-- 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
e
-- 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 prima parte andava bene con il risultato di:
WEB | WEB | WEB | RAGNATELA
Ma il secondo risultato è stato un po 'confuso:
dbo | WEB | WEB | RAGNATELA
Qual è la differenza tra EXECUTE AS USER e EXECUTE AS LOGIN che fa fallire il secondo? Inoltre, ovviamente, il primo è a livello di database e il secondo è la rappresentazione a livello di server, di ciò di cui sono a conoscenza e non spiega la situazione qui.