SQL Server-スキーマ全体またはオブジェクトに権限を付与しますか?


25

SQL Severのデータベースパーミッション管理の世界に関しては、私は非常に環境に優しいです。

例をシンプルにしましょう。

アカウント「admin」がスキーマA、B、およびCの所有者であるとします。

スキーマA、B、およびCの下で作成されたオブジェクト(テーブル/ビュー)に対する完全な権限(更新/削除/挿入/選択/変更)が必要な別のアカウント「ミニオン」があります。

これは可能ですか?または、これらのスキーマの下にテーブル/ビューを追加するたびに、grantステートメントを実行する必要がありますか?(私には少しばかげているようです)。

回答:


36

GRANT既存のすべておよびそのスキーマに存在するすべてに対して有効な権限をスキーマ化できます。

スキーマのアクセス許可を付与する

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <schema> TO <user>;

さらに、そのスキーマ内の特定のオブジェクトに対するアクセス許可を拒否する場合は、実行できます。

オブジェクトのアクセス許可を拒否する

DENY INSERT ON OBJECT::<schema>.<object> TO <user>;

1
また、スキーマまたはユーザー名に特殊文字が含まれる場合は、角括弧を使用します。例.... SCHEMA :: [schema] TO [company-name/joshua.duxbury]
ジョシュアダックスベリー

Azureで動作しないのはなぜですか?(コマンドは機能しますが、SSMSが起動し、「あなたはDbの所有者ではありません。テーブルを保存できないかもしれません。」と十分に確信しています。 (権限 'Database'、 '<db name>'、TheUserId、 'Create Table'、および 'GRANT'のstate_descが表示されます)他に必要な魔法はありますか?または、DboのみがAzureを使用できますか?
Traderhut Games

13

さらに簡略化するために、ロールを使用して目的のジョブを実行できます。

役割に権限を割り当てたら、ユーザーを役割に追加するだけです。この方法では、個々のユーザーの権限を管理する必要はありません。ユーザーは、ロールに付与された権限を継承します。

以下はあなたが始めるための例です:

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