Sql-Server

如何還原多個模仿?

  • April 2, 2014

當存在嵌套模擬時(如 中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。

引用自:https://dba.stackexchange.com/questions/52671