2

別のデータベース (B) のストアド プロシージャを呼び出すトリガーを 1 つのデータベース (A) で実行したいと考えています。

TableA に TRIGGER trg_A を作成
インサート用
なので
始める
    EXEC DatabaseB.dbo.stp_B
終わり

これを、DatabaseA の UserA で LoginA として実行したいと考えています。また、DatabaseB に UserB を持つ LoginB があります。

どうすればこれを達成できますか?

現在、このエラー メッセージが表示されます

サーバー プリンシパル "..." はアクセスできません
データベース "DatabaseB" を現在のセキュリティ コンテキストの下に置きます。

試してみましたがWITH EXECUTE AS 'UserB'、運が悪かったです。

4

1 に答える 1

1

興味深い質問です。あなたは私をオタク狙撃しました。さまざまなシナリオをテストしました。

これらは失敗しました:

  1. tableA のトリガーは、DatabaseB のストアド プロシージャを参照します。LoginA は DatabaseB にユーザーとして存在しません。
  2. tableA のトリガーは、DatabaseB.dbo.TableB に挿入する DatabaseA のストアド プロシージャを参照します。LoginA は DatabaseB に存在しません。
  3. DatabaseB のユーザーとして LoginA を作成しましたが、権限を与えませんでした。テスト 1 とテスト 2 を繰り返します。どちらも失敗しました。
  4. DatabaseA のユーザーとして LoginB を作成しました。LoginB が DatabaseB.dbo.TableB に挿入できることを確認しました。LoginA として DatabaseA にログインし、EXECUTE AS User = 'LoginB' を実行しました。DatabaseA.dbo.TableA に挿入しようとしました。

トリガーを機能させる唯一の方法は、LoginA の DatabaseB にユーザーを作成し、DatabaseB ストアド プロシージャを実行する権限を付与することでした。

于 2010-10-01T18:58:40.383 に答える