SQL Server EXECUTE ASトラブル


13

ストアドプロシージャを使用しようとしているときに何かが見つかりませんEXECUTE AS。ストアドプロシージャは、データを読み取りsource_db、集計し、結果をに格納しtarget_dbます。

sp自体はにありtarget_dbます。私は専用のログインを持っているし、両方のユーザーにマッピングsource_dbしてtarget_db、SPの所有者のために(そのユーザーが存在するapp_agentsource_dbやでtarget_dbログイン用app_agent)。

としてログインしてapp_agent実行する場合

EXEC target_db.app_agent_schema.import_data

すべてが正常に動作します。しかし、私が変更した場合

ALTER PROCEDURE app_agent_schema.import_data WITH EXECUTE AS OWNER` (or `AS SELF`) 

実行してみてください

サーバープリンシパル "app_agent"は、現在のセキュリティコンテキストではデータベース "source_db"にアクセスできません。

SQL Server 2008を使用しています。

誰かが私のエラーを指摘できますか?

ありがとう

更新 いくつかの研究を行った後、私はそれを発見しましたALTER DATABASE target_db SET TRUSTWORTHY ON、それが問題解決するが、それは私にとって正しい解決策ではないようです...


1
答えは、データベースレベルのクロスデータベース所有権チェーンオプションを使用することだと思います。私はあなたのシナリオでエラーを再現できましたが、正確に再現したかどうかを知るのに十分な詳細が与えられていません...
ジョンセイゲル

回答:


24

これについては、EXECUTE ASを使用したデータベース偽装の拡張で説明しています。EXECUTE ASコンテキストは現在のデータベースでのみ信頼されており、他のデータベースに溢れさせることは特権のエスカレーション攻撃ベクトルです。

上記のリンクの記事で説明されている2つのソリューションがあります。

  • 簡単な方法は、データベースにTRUSTWORTHY:をマークすることですALTER DATABASE [source_db] SET TRUSTWORTHY ON;。簡単なものの、それが作るようにも危険であるdbosource_dbデファクトsysadmin

  • 安全なのはコード署名を使用することです。例については、別のデータベースプロシージャ呼び出すを参照してください。これはより複雑ですが、100%buletproffのセキュリティです。


0

どのユーザーがALTER PROCEDUREコマンドを実行しますか?意図したものではなく、そのユーザーに所有者(自己)アクセスレベルを設定した可能性があります。


プロシージャを作成した同じユーザー(app_agent)。app_agentなしexecute as owner/selfで作成されたプロシージャがある場合はapp_agent、SPが正しく実行されます。EXECUTE AS SELF(同じユーザー)を追加し、としてもログインするとapp_agent...is not able to access the database...
a1ex07
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.