0

db_reader 権限のみを持つ db ユーザーがいます。(彼はすべてにSELECTを持っています)。

100 個のストアド プロシージャがあります。DML ではなく SELECT SP のみを実行できるようにしてほしい。残念ながら、彼にすべての「実行」を許可すると、DML (INSERT/UPDATE/DELETE) も実行できるようになります。

それを回避する方法はありますか?

(将来の変更や将来の SP もサポートしたいので、すべての SP で実行して、特定の機能に特定の許可を与えたくはありません)

4

3 に答える 3

1
  • データベースにロールを作成する
  • 以下のコードを使用して、「select」ストアド プロシージャのそれぞれにロールを追加します。

    use [YourDBNameHere] GO GRANT EXECUTE ON [TheSchemaNameHere].[YourSPNameHere] TO [YourRoleNameHere] GO

  • 役割に使用を追加する

  • 「すべてから選択」のユーザー権限を削除します

于 2011-01-02T21:32:09.010 に答える
1

他のコメントのように苦痛であっても、賢い方法はありません

  • 許可を個別に(他の回答で)
  • スキーマを使用する(他の回答で)
  • すべてのテーブルでトリガーを使用する

DENY または db_denydatareaderは、テーブル レベルでは機能しません。

ストアド プロシージャは任意のコードを実行できます。select または DML proc を区別する方法はありません。

于 2011-01-03T18:12:12.413 に答える
0

SQL Server の権限は、スキーマごとに適用できます。SELECT プロシージャを別のスキーマに配置し、EXEC 権限を許可します。

于 2011-01-02T21:12:58.457 に答える