SQL Severでのデータベース権限管理の世界に関しては、私はとても環境に配慮しています。
例を単純にしてみましょう。
アカウント「admin」がスキーマA、B、Cの所有者であるとします。
スキーマA、B、Cで作成されたオブジェクト(テーブル/ビュー)に対する完全な権限(更新/削除/挿入/選択/変更)を取得したい別のアカウント「ミニオン」があります。
これは可能ですか?または、これらのスキーマの下にテーブル/ビューを追加するたびに、grantステートメントを実行する必要がありますか? (私には少しばかげているようです)。
そのスキーマに存在するすべておよび存在するすべてに有効なGRANT
スキーマ権限を使用できます。
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <schema> TO <user>;
さらに、そのスキーマ内の特定のオブジェクトに対するアクセス許可を拒否する場合は、それを行うことができます。
DENY INSERT ON OBJECT::<schema>.<object> TO <user>;
さらに簡単にするために、役割を使用して、探している仕事を行うことができます。
ロールに権限を割り当てたら、ユーザーをロールに追加するだけです。この方法では、個々のユーザーの権限を管理する必要はありません。ユーザーは、ロールに付与された権限を継承します。
以下はあなたが始めるための例です:
-- Create the database role
CREATE ROLE TableSelector AUTHORIZATION [dbo]
GO
---- Grant access rights to a specific schema in the database
GRANT
SELECT, INSERT, UPDATE, DELETE, ALTER
ON SCHEMA::dbo
TO TableSelector
GO
-- Add an existing user to the new role created
EXEC sp_addrolemember 'TableSelector', 'MyDBUser'
GO
-- Revoke access rights on a schema from a role
DENY ALTER -- you can customize here ...
ON SCHEMA::dbo
TO TableSelector