ストアドプロシージャの実行を許可し、書き込みを許可しない方法は?


11

SQL Server 2012インスタンスに「読み取り」ユーザーを設定したいのですが。すべてのテーブルとビューからデータを取得するストアドプロシージャ、関数、またはダイレクトSQLステートメントを実行する権利を許可しますが、更新または挿入(つまり、何も読み取らず、何も書き込まない)は許可しません。

名前で各関数またはストアドプロシージャに特別な権限を付与せずにこれを設定できますが、テーブルを変更する権限を取り除いて、関数またはストアドプロシージャの実行権を彼に付与できますか?

代わりにSQL Server 2008を実行すると何が変わりますか?

説明と追加:

  1. ストアドプロシージャがデータを変更した場合、ユーザーはエラーメッセージを受け取ります(変更を拒否するか、ストアドプロシージャへのアクセスを完全に拒否します)。
  2. 潜在的なソリューションにアクセス許可の拒否が含まれている場合、拒否する代わりに特定のアクセス許可を付与することはできませんか?
  3. データベース内のすべてのテーブル、ビューなど(現在および将来存在する)に1つのステートメントで拒否を適用できますか?

私はここに新しいです。必要に応じてタグを設定し、それ以外の場合は質問を編集してください
gt6989b

1
@KrisGruttemeyerはその考えでした-彼はそれを実行できましたが、それはある種のエラーを引き起こしました。あるいは、彼が実行する権限を持っているspのリストを指定する必要がない限り、彼にそれを実行することを許可しなくても大丈夫です
gt6989b

1
その場合は、SQL Serverの権限について読む必要があります。アクセス許可のバリアントGRANTには、アクセス許可の付与、DENYアクセス許可の拒否 REVOKEGRANTまたはの削除の3 つがありDENYます。GRANTまたはDENYユーザーがアクセス許可を継承できない場合は、たとえば、ストアドプロシージャへのアクセス権を取得します。
JNK、2014

1
@ gt6989b DENY DELETE, INSERT, UPDATEデータベースまたはスキーマを使用している場合は、テーブルとビューにのみ影響があると思います。
JNK

1
@ gt6989b-これらのコメントの提案された回答が正しくないことが判明したことに注意してください。ポールホワイトの返答を参照してください。
RLF 2014

回答:


15

これは、思ったほど簡単には達成できません。1つの方法は、新しいユーザー定義のデータベースロールを作成し、そのロールに必要なすべての権限を付与してから、ユーザーを新しいロールに追加することです。これにより、少なくともユーザー(または他のユーザー定義の役割)にこの一連の権限を簡単に付与できるようになります。次の手順は、良いスタートです:

-- The user-defined role containing all required permissions
CREATE ROLE Readers AUTHORIZATION dbo;

-- Give read-only access to all tables,
-- views on those tables, and in-line
-- functions
ALTER ROLE db_datareader ADD MEMBER Readers;

-- Example: add a user (Bob) to the role
ALTER ROLE Readers ADD MEMBER Bob;

この後、Bobはデータベースで幅広い読み取り専用権限を持ちます。彼はすべてのテーブル、それらのテーブルのビュー、およびインライン関数から読み取ることができます。ただし、プロシージャを実行したり、非インライン関数を使用したりすることはできません。

読者にアクセスを許可したい安全な機能と手順のために、読者の役割に特定の権限を付与する必要があります。このプロセスを簡単にするために実行できる手順(たとえば、オブジェクトをスキーマにグループ化して、個々のオブジェクトではなくスキーマに対する実行権限を付与するなど)があるかもしれませんが、ここで説明するには詳細が多すぎます。

変更するプロシージャとオブジェクトが共通の所有者を共有している場合、データ変更権限がなくても、Readerが実行権限を与えられているストアドプロシージャを介してReaderがデータを変更できなくなることはありません。この場合、明示的な拒否も尊重されません。この機能は、所有権の継承と呼ばれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.