EXECUTE AS USERとEXECUTE AS LOGINの違いは何ですか?


10

最近、EXECUTE AS LOGINを使用して、特定のユーザーがデータベースの1つでテーブル関数を使用できるかどうかを確認しています。テストは彼ができることを示したが、彼は失敗を繰り返し報告した。

人はログイン「WEB」を使用してデータベースに接続し、ログイン「WEB」に関連付けられたデータベースに「WEB」というユーザーがいるため、次のスクリプトを試しました。

-- 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

そして

-- 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

最初の部分は次の結果で問題ありませんでした:

WEB | WEB | WEB | ウェブ

しかし、2番目の結果は少し混乱しました。

dbo | WEB | WEB | ウェブ

2番目のものを失敗させるEXECUTE AS USERとEXECUTE AS LOGINの違いは何ですか?その上、もちろん、1つ目はデータベースレベルで、2つ目はサーバーレベルのなりすましです。私が認識していることであり、ここでは状況を説明しません。


2つ目は「失敗」ではなく、ログインにサーバーの役割(sysadmin)が割り当てられていることを通知するだけです。ユーザーが要求しているスキーマを確認しましたか?それ以前に、dboのデフォルトスキーマが、開発者が想定していたスキーマではなかった場合。テーブルを完全に参照することにより、コードをより適切に修正
Stuart Moore

回答:


7

sysadminグループのメンバーは、データベースに明示的なユーザーがいる場合でも、常ににマップされdboます。したがって、ログインWEBはのメンバーであるように見えるsysadminため、2番目のケースではUSER_NAME()正しく戻りますdbo


チェックして確認しました。それは確かにsysadminのメンバーでした。このレポートは他の開発者の1人に届いており、正しいソリューションではなく、単にログインsysadminロールを割り当てていることがわかりました。そんなことは考えていませんが、本当にがっかりです。彼が戻ってきたら、真剣に話し合う予定です。今日は何か新しいことを学びました、ありがとう。
gemisigo 2012年

また、アプリケーション(レポート?)がsysadminメンバーに対して偽装権限を持っていることも意味します。これがどのように権限階層で正確に許可されているかを調べてください。今でも、レポートが必要に応じて別のsysadminメンバーになりすますことができるので、レポートアプリケーションは事実上のシステム管理者です。つまり。ia特権の昇格攻撃の可能性。ハッカーが使用する可能性があります。
Remus Rusanu

返信アプリにIMPERSONATE権限がWEBあり、そのアプリWEBから削除されたsysadmin場合、ドアは閉じられます。しかし、それでもチェックする価値があります。
Remus Rusanu

はい、権利に影響するすべてをもう一度チェックして、この方法で「修正」された他の問題があったかどうかを確認する必要があります。今はあまり幸せではありません:(ありがとう、
Remus。– gemisigo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.