web-dev-qa-db-ja.com

クエリを介してビュー定義を表示するには、どのような権限が必要ですか?

私はデータベースに対する完全な管理者権限を持っているため、ビューの定義を照会および表示できます。ただし、JDBC Jenkinsのジョブマジックで読み取り専用ユーザーを使用してビューにクエリを実行します。問題:私の管理者ユーザーとは異なり、読み取り専用ユーザーにはビューのコード/定義が表示されません。

このクエリは、管理者として行動するときにすべてのビューに必要なすべてのビュー定義とメタデータを提供します。

SELECT name AS VIEW_NAME,
definition,
create_date,
modify_date  
FROM [my_database].[sys].[all_views]
JOIN [my_database].[sys].[sql_modules]
ON [my_database].[sys].[all_views].object_id = [my_database].[sys].[sql_modules].object_id

その結果、クエリを管理者として実行すると、次のようなエントリが表示されます。

name        | definition        | create_date | modify_date 
sample_view | SELECT * FROM bla | 01.01.2017 | 02.01.2017

ただし、読み取り専用ユーザーで行う場合はそれほど多くありません。

 name        | definition        | create_date | modify_date 
 sample_view | null              | 01.01.2017  | 02.01.2017

ここでは、読み取り専用ユーザーの許可構成を確認できます。私は彼に必要な許可を与えましたが、ビュー定義は結果セットでユーザーに表示されません。

さらに、ユーザーがSELECTおよびVIEW定義ステートメントを実行できるようにして構成を保存した後、SELECTおよびVIEW DEFINITIONの2番目のエントリが構成テーブルに追加されたのは非常に奇妙です。

Read_only_user_permission

5
Bruder Lustig

INFORMATION_SCHEMAおよびsysスキーマに対するVIEW DEFINITIONおよびSELECT権限を付与するだけでは、ビューの定義を表示する権限が付与されません。

追加した権限により、sysスキーマのすべてのオブジェクトに関する情報とinformation_schemaが提供されます。

他のスキーマで作成されたビュー定義を見たい場合は、その特定のスキーマにユーザーにVIEW DEFINITIONを提供する必要があります。

など:GRANT VIEW DEFINITION ON SCHEMA::SchemaWhereViewsAreCreated TO [YourUser]

3
S4V1N

VIEW DEFINITION興味のあるビューで直接、ユーザーが次のようにその定義を見ることができるようにします。

grant view definition on object::sch.vw_MyView to MyUser 

スキーマに権限を与えるべきではありません。この場合、ユーザーはそのスキーマのすべてのオブジェクト定義(関数/ストアドプロシージャなど)を見ることができるため、最小特権の原則に違反します。

2
sepupic