web-dev-qa-db-ja.com

SQL Serverユーザーにデータの挿入/更新/削除を許可し、スキーマの変更は許可しない方法は?

私のアプリケーション(C#、ASP.Net)は、DBのデータを挿入、更新、削除し、ストアドプロシージャを実行する必要があります。 DBスキーマが変更されないようにする必要があります。テーブルの変更、作成または削除、ストアドプロシージャの変更はありません。

アプリケーションユーザーに付与する必要がある権限の組み合わせは何ですか?テーブルでデータを挿入/更新/削除する必要があるため、単に「選択」は機能しません。

特定のログインの権限とアクセスを確認するにはどうすればよいですか?ログインのアクセス許可とアクセスを許可または拒否するにはどうすればよいですか?新しいユーザー(ログイン)に1つのデータベースのみにアクセスする権限を与える必要があります。

SSMSでのSQL Server 2008 R2の使用。

18
jprusakova

これをオブジェクトレベルで本当に制御したい場合は、次のようにします。

GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user;

スキーマレベル:

GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user;

ただし、理想的には、テーブルに対してアドホックDMLを許可せず、ストアドプロシージャを介してすべてのDMLを制御します。その場合は、プロシージャ自体にexecを付与するだけでよく、それが触れるオブジェクトに付与する必要はありません。

GRANT EXEC ON dbo.procedure TO user;

同様に、特定のスキーマのすべてのプロシージャでexecを許可する場合は、次のように言うことができます。

GRANT EXEC ON SCHEMA::dbo TO user;

1つの例外は、ストアドプロシージャが動的SQLを構成する場合です。そのような場合でも、動的SQL実行のコンテキストで基本となるテーブルに権限を適用する必要があるか、EXECUTE AS OWNERを使用できる場合があります。

28
Aaron Bertrand