データベースのシステム以外のすべてのビューのみへのアクセスをユーザーに許可する方法はありますか?


9

SQL Serverでは、特定のデータベースにユーザーがいて、データベースのシステム以外のすべてのビューへのアクセスのみを許可するように求められました。これは、ビューのタイプのセキュリティ保護可能な要素を編集し、それぞれに選択を許可することで実行できると思いますが、ビューはたくさんあります。これを達成するためのより効率的な方法はありますか?

回答:


8

次のような構文はありません

GRANT SELECT ON ALL::Views TO SomeUser 

GRANT SELECT個々のオブジェクトスキーマ、またはデータベース全体に対する権限を付与できますが、オブジェクトタイプでフィルタリングしてビューのみを含めることはできません。この種のアドホックタスクViewReaderの場合、と呼ばれる新しいロールを作成し、ユーザーをそのロールに追加してから、SSMSを実行します。

SELECT 'GRANT SELECT ON ' + 
          QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + 
      ' TO ViewReader;'
FROM sys.views
WHERE is_ms_shipped = 0

GRANT必要な権限で実行するスクリプトを生成します。


とても優雅な答えをありがとう。このスクリプトは少し頭が痛いので、実装する前に少し読んでみましょう。再度、感謝します。
クリストファーガルシア

1
@lush-スクリプトは、確認、コピー、貼り付け、実行するためのコマンドを提供します。あなたは結果を連結するためにもっと複雑なことをすることができますEXECが、私は一回限りの仕事に煩わされることはありません。
マーティン・スミス

私は今理解しています、これはこの問題の完璧な解決策です、ありがとう!
クリストファーガルシア

4

私の場合、私は別のアプローチをとりました。これは私がやったことです:

  1. ログインを作成してデータベースにマッピングします。
  2. データベースに移動し、たとえばPublic_Viewというスキーマを作成します。このスキーマの所有者は、ビューが参照するテーブルの所有者と同じである必要があります。
  3. 新しいユーザーに新しいスキーマへのアクセスを許可します。
  4. 新しいスキーマに必要なだけビューを作成すると、新しいユーザーがそれらにアクセスできるようになります。

良い点は、新しいユーザーはテーブルにアクセスできず、テーブルを表示することさえできないということです。

お役に立てば幸いです。


4
+1私にとってこのソリューションの良い点は、新しいビューが作成されるときに明示的に権限を割り当てる必要がないことです。
マーティンスミス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.