2009-06-08 5 views
0

はここに私のシナリオ...SQLパーミッション/セキュリティ - パーミッションを付与されていない別のビューを使用するビューから「選択」にパーミッションを与えることはできますか?

SQLの役割だ

  • Staff_User

スキーム

  • 人々

  • People.Persons

  • People.PhoneNumbers

ビュー

  • People.vtPersons - vtPersonsビューは、現在ログインしているユーザーに属するものだけを示すPersonsテーブルのデータをフィルタリングします。

  • People.vtPhoneNumbers - vtPhoneNumbersビューが現在ログインしているユーザーに属するだけのことを示すの電話番号テーブルからデータをフィルタリングします。

  • People.vwContactInformation - vwContactInformation「ビュー」、それをCrystalレポートでクエリーとして使用できるようにvtPersonsとvtPhoneNumbersからのデータを組み合わせています。

Staff_Userの役割はvwContactInformationビューと他には何を「SELECT」権限を付与されています。

オブジェクトのvtPhoneNumbersに対するアクセス許可が拒否されたというエラーが表示されます。このビューには「SELECT」権限も付与する必要がありますか?別のSCHEMEの経験から、私はこれを行う必要はなく、すべてがうまくいきました。しかし、今私は作成した2番目のSCHEMEでこのエラーが発生しています。誰もがビューに呼び出されるビュー、テーブル、関数などにカスケードする権限をロールにアクセス可能にした最初のスキームで持っているものを提案することができます。

おかげで、SQL Serverを想定すると ジャスティン

+0

どのDBMSを使用していますか?一部のベンダーは、「呼び出し側」権限と「定義者」権限特有の動作を提供しています。 –

+0

Microsoft SQL Server 2008.これらの特定の動作を提供するとは思わない。 – Justin

答えて

0

は、(すべてのバージョン)

エラーは「拒否」と言う:権限が不足しているか間違っていた場合、あなたは「存在しないようなもの、あるいは全くの権限を参照してくださいね"それに基づいて、vtPhoneNumbersの権利をチェックして明示的なDENYが設定されているかどうかを確認します。 DENY is always evaluated and takes precedence.(申し訳ありませんが、BOLで見つけることができません)。

理由:

ownership chains/chainingのアイデアは、すべてのオブジェクトが同じスキーマ(別名所有者)である場合、参照されたオブジェクトに対する権限がチェックされていないことを意味します。

この場合、すべてのビューとテーブルが「People」スキーマにあるため、vtPhoneNumbersとvtPersonsのアクセス許可をチェックするべきではありません。

注:REVOKEは、権限(以前はGRANTまたはDENYを使用して設定済み)を削除します。誰かがvtPhoneNumbersの前のGRANT文を削除するためにDENY NOT REVOKEを使用している可能性があります

関連する問題