Sql-Server
如何還原多個模仿?
當存在嵌套模擬時(如 中
exec as user = 'user1'; exec as user = 'user2'; exec as user = 'user1';
),有沒有一種方法可以還原所有模擬,而不必revert
多次使用該命令(例如revert all;
)?或者至少,如果必須
revert
重複使用,有沒有辦法檢查是否存在主動模擬,以便可以根據需要多次循環命令(例如while @@IMPERSONATION_COUNT > 0 revert;
)?
您可以在批處理開始時擷取目前使用者的名稱,然後將其與您想要
REVERT
返回原始使用者的目前使用者進行比較。例如:
DECLARE @Name SYSNAME; SET @Name = SUSER_NAME(); SELECT @Name; EXEC AS USER = 'SomeUser'; EXEC AS USER = 'SomeUser1'; EXEC AS USER = 'SomeUser2'; SELECT SUSER_NAME(); WHILE @Name <> SUSER_NAME() REVERT; SELECT SUSER_NAME();
您可以將目前上下文分配給 cookie,然後在需要時恢復到該 cookie。