web-dev-qa-db-ja.com

SQL Server EXECUTE ASトラブル

ストアドプロシージャでEXECUTE ASを使用しようとしているときに何か不足しています。ストアドプロシージャはsource_dbからデータを読み取り、それを集約してtarget_dbに結果を格納します。

Sp自体はtarget_dbにあります。私は専用のログインを持っており、それをsource_dbtarget_dbの両方のユーザーにマッピングします(つまり、app_agentsource_dbtarget_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が問題を解決することがわかりましたが、それは私にとって正しい解決策ではないようです...

13
a1ex07

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

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

  • 簡単なのは、データベースにTRUSTWORTHY:ALTER DATABASE [source_db] SET TRUSTWORTHY ON;とマークを付けることです。簡単ですが、source_dbdboを事実上のsysadminにするので危険です。

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

24
Remus Rusanu

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

0
Sky