4

現在 SQL Server 2012 を使用していますが、異なるアクセス権を持つクロススキーマ アクセスについて質問があります。

UserSchemaTableSchemaの 2 つのスキーマがあるとします。

TableSchema には 2 つのテーブルが含まれており、このスキーマには管理者ユーザーのみが読み取り、更新などのためにアクセスできます。

UserSchema は、SELECT 権限 (または読み取り権限と呼ばれるもの) を持つユーザーがアクセスできるようにする必要があります。このスキーマには、TableSchema の 2 つのテーブルからデータを選択するビューが含まれています。

私の考えでは、UserSchema のユーザーは UserSchema のみにアクセスでき、TableSchema にはアクセスできないはずです。これは機能しますか?または、テーブルから直接データを読み取る権限がないため、ビューのクエリが機能しませんか? これを回避する良い解決策はありますか?それとも、この考えを忘れて、ユーザーに TableSchema への読み取りアクセス権も与える必要がありますか?

主な質問への答えはおそらく明らかですが、グーグルで検索すると少し異なる答えが見つかるようです.

4

1 に答える 1

6

各スキーマの所有者が同じである限り、所有権チェーンが壊れていないため、このアプローチはうまく機能します。

詳細については、次のリンクを参照してください。

所有権チェーン

たとえば、これは機能します:

  • UsersSchema 所有者 dbo

  • TableSchema 所有者 dbo

  • User1 は、UsersSchema に対する選択権限を付与し、TableSchema に対する選択権限を拒否します

  • view1 は UsersSchema に存在します (Table1 から選択)

  • table1 は TableSchema に存在します

user1 が select * from UsersSchema.view1 を実行 - SQL サーバーは、user1 がビューから選択する権限を持っていることを確認します。

次に、SQL サーバーはビューの所有者をチェックし、dbo SQL サーバーはビューがデータを必要としているテーブルの所有者をチェックし、さらに dbo (dbo が両方のスキーマを所有しているため) 所有権チェーンが壊れていないため、SQL サーバーは何をチェックするかを気にしません。 table1 または TableSchema で user1 の選択を拒否した場合でも、user1 が table1 に対して持っているアクセス許可とデータが返されます。

user1 が直接 table1 にアクセスしようとすると、table1 へのアクセスは引き続き拒否されます。

于 2013-07-24T16:18:38.147 に答える