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

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

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

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

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

SSMS で SQL Server 2008 R2 を使用します。

ベストアンサー1

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

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;

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

おすすめ記事