web-dev-qa-db-ja.com

現在のセキュリティコンテキストを元に戻すことはできません

メッセージ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

enter image description here

execute as loginを実行したときの元のデータベースを思い出せない場合はどうなりますか?

私がどこにいたかを知る方法はありますか?

1

それを見つける方法はありませんが、そのログインでアクセスできるすべてのデータベースを試すことができます。つまり、偽装ログインで次のコードを実行します。

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

このようにして、このログインを偽装できるすべてのデータベースを見つけることができます。次に、出力をクエリウィンドウにコピーし、成功するまで行ごとに試します。

しかし、自分自身に戻る最も簡単な方法は、接続を変更することです(クエリウィンドウで右クリック)

enter image description here

1
sepupic