web-dev-qa-db-ja.com

MSSQLでスキーマのGRANT CONTROLは何をしますか?

これらのテストにはSQL Server 2016を使用しています。

次の例では、ユーザーSのスキーマSにテーブルを作成できませんでした

USE [D];
GRANT CONTROL ON SCHEMA :: [S] TO [U];

しかし、これはしました:

USE [D]
GRANT ALTER ON SCHEMA :: [S] TO [U];
GRANT CREATE TABLE TO [U];

ユーザーが特定のスキーマでテーブルを作成できるようにこれらの2つの追加コマンドを実行する必要がある場合、GRANT CONTROLは何をすることになっていますか?

この説明はいいですが、GRANT CONTROLコマンドが、コマンドの実行前と実行後に、このスキーマのあるなしにかかわらず、データベースのユーザーのセキュリティに物理的に影響を及ぼしていることを確認できる、どのようなユースケースを実行できますか?

https://blogs.msdn.Microsoft.com/lcris/2009/08/11/basic-sql-server-security-concepts-ownership-control-take-ownership/

CONTROL権限:CONTROL権限を使用すると、エンティティのすべての権限を何らかのプリンシパルに簡単に付与できます。これは、エンティティの所有権の次に良いものですが、所有権ほど強力ではありません。主な違いは、CONTROLの被付与者がエンティティに対する他のいくつかの権限を引き続き拒否される可能性があることです。たとえば、テーブルに対するCONTROLを付与すると同時に、そのテーブルに対するSELECTを拒否して、そこから選択できないようにすることができます。これは、所有者にアクセス許可を付与または拒否できないため、所有者に起こることはありません。 。

4
MacGyver

スキーマのCONTROLが何をもたらすかを確認するには、権限なしでテストユーザーを作成し、スキーマにCONTROLを付与して、その後にどのような権限があるかを確認します。

create user test;
grant control on schema::dbo to test;

execute as user = 'test';
select *
from sys.fn_my_permissions('dbo', 'schema');
revert;

ここにあなたが得るものがあります:

enter image description here

CREATE TABLEにしたい場合は、BOLの記事 CREATE TABLE(Transact-SQL) を開き、PERMISSIONSまでスクロールします。

enter image description here

これで、テーブルにCLRユーザー定義型の列が含まれていない場合でも、ユーザーがテーブルを作成できるようにするには、CREATE TABLE権限が必要です。

テストユーザーは既にスキーマでCONTROLによってALTER SCHEMAを暗黙指定していますが、CREATE TABLEを付与する必要があります(CLRユーザー定義型の場合はREFERENCE権限も付与する必要があります)。

4
sepupic

CONTROLは、SQL Serverの「セキュリティ保護可能な」オブジェクト(データベースなど)に神のような権限を付与します。

https://docs.Microsoft.com/en-us/sql/relational-databases/security/permissions-database-engine?view=sql-server-2017

0
openwonk