0

上記のストアド プロシージャの実行権限が付与されている制限付きログインからストアド プロシージャを実行しようとしています。ストアド プロシージャは、同じサーバー上に存在する 2 つのデータベースにアクセスします。ストアド プロシージャを実行すると、次のようなエラーが表示されます。

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

背景: 私は最近、2 つの異なるデータベース サーバーを 1 つのデータベースに移行するという目標を課されました。必要なデータベースをバックアップしてエクスポートし、それらを新しいサーバーに復元しました。古いデータベースは、MS sql server 2000 (データベース 2 用) および MS sql server 2005 (データベース 1 用 - 前述のストアド プロシージャがある場所) です。

データベースをインポートしたため、所有者が異なり、それが問題を引き起こす可能性があることを示唆しているように見えるいくつかのリードを見つけました。そこで、2 つのデータベースで「exec sp_changedbowner 'sa'」を実行して、所有者が同じであることを確認しました。LimitedUser からストアド プロシージャを実行すると、同じエラーが発生します。さまざまなフォーラム サイトの他の多くの例では、異なるサーバー上にあるデータベースを扱っており、オープン クエリ コマンドを使用する必要があります。これが必要だとは思いません。

より多くの管理者権限を持つユーザーとして実行すると、ストアド プロシージャは問題なく実行されます。私の質問は、LimitedUser からのこのアクションを許可するには、どの権限を設定する必要があるかということです。

ありがとう!

4

1 に答える 1

0

LimitedUser は、ストアド プロシージャがそのデータベースで行っていることを実行するために Database2 に対するアクセス許可を必要とします。所有権の連鎖は同じデータベース内でのみ機能します (サーバー オプションの Cross Database Ownership Chaining を有効にしない限り、これはデータベースを分解するのでお勧めしません)。コンテナをセキュリティ境界として)。

したがって、たとえば、db1 と db2 があり、db1 には select * from db2.dbo.table1 を実行するストアド プロシージャがあります。

このためには、LimitedUser に次のものが必要です。

  • プロシージャの db1 データベースでの実行権限
  • db2 の table1 に対する権限を選択します
于 2013-11-01T09:37:23.853 に答える