1

私は 2 つのデータベースを持っています。それらをDatabase1Database2と呼びましょう。アクセス許可が非常に限られているユーザーをUser1と呼びましょう。また、 Database1のストアド プロシージャをProc1と呼びましょう。

Proc1でUser1EXECUTEアクセス許可を付与します。User1にはこれらのテーブルに対する明示的な権限がありませんが、参照されているすべてのテーブル (SELECT、UPDATE ... など) がDatabase1にある限り、問題はありませんでした。GRANT EXECUTE ON [dbo].[Proc1] TO [User1]

Proc1をテーブルから SELECT するように変更しました。それをTable1と呼びましょう。Proc1を実行すると、次のエラーが表示されます。 オブジェクト 'Table1'、データベース 'Database2'、スキーマ 'dbo' で SELECT 権限が拒否されました

私の理解では、EXECUTE をストアド プロシージャに付与すると、SQL Server が必要なアクセス許可を処理します。テーブル (またはオブジェクト) が別のデータベースにある場合、動作が異なりますか?

ノート:

  • User1は両方のデータベースのユーザーであり、制限付きの同じ権限を持っています
  • SQL Server 2005 を使用しています
4

4 に答える 4

1

SQL Server がパーミッション チェーンに沿ってパーミッションをチェックすると、違いがあるようです。具体的には:

SQL Server は、特定のデータベース間または SQL Server の単一インスタンス内のすべてのデータベース間で所有権の連鎖を許可するように構成できます。データベース間の所有権の連鎖は既定で無効になっているため、特に必要でない限り有効にしないでください。

(出典: http://msdn.microsoft.com/en-us/library/ms188676.aspx )

于 2013-10-01T07:07:14.363 に答える