Sql-Server

目前的安全上下文無法恢復

  • October 9, 2018

消息 15199,級別 16,狀態 1,第 29 行目前的安全上下文無法恢復。

請切換到Execute As呼叫的原始數據庫,然後重試。

execute as login='juno'
REVERT


DECLARE @User VARCHAR(20)
SELECT @USER = SUBSTRING(SUSER_SNAME(), CHARINDEX('\', SUSER_SNAME()) + 1, LEN(SUSER_SNAME()))
SELECT  [THE_SERVER]= @@SERVERNAME
       ,[DB_NAME] =DB_NAME()
       ,[@USER]=@USER 
       ,[SUSER_SNAME()]=SUSER_SNAME()
       ,[SYSTEM_USER]=SYSTEM_USER
       ,[USER_NAME()]=USER_NAME() 
       ,[CURRENT_USER]=CURRENT_USER
       ,[ORIGINAL_LOGIN()]=ORIGINAL_LOGIN()
       ,[USER]=USER
       ,[SESSION_USER]=SESSION_USER

在此處輸入圖像描述

如果我不記得執行時的原始數據庫怎麼execute as login辦?

有沒有辦法知道我在哪裡?

沒有辦法找出來,但是你可以嘗試該登錄可以訪問的所有數據庫,即在模擬登錄下執行以下程式碼:

select 'use ' + name + '; revert;'
from sys.databases
where HAS_DBACCESS(name) = 1;

通過這種方式,您可以找到可以模擬此登錄的所有數據庫。然後將輸出複製到查詢視窗並逐行嘗試直到成功。

但是返回自己最簡單的方法就是更改連接(在查詢視窗中點擊滑鼠右鍵)

在此處輸入圖像描述

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