これらのテストには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コマンドが、コマンドの実行前と実行後に、このスキーマのあるなしにかかわらず、データベースのユーザーのセキュリティに物理的に影響を及ぼしていることを確認できる、どのようなユースケースを実行できますか?
CONTROL権限:CONTROL権限を使用すると、エンティティのすべての権限を何らかのプリンシパルに簡単に付与できます。これは、エンティティの所有権の次に良いものですが、所有権ほど強力ではありません。主な違いは、CONTROLの被付与者がエンティティに対する他のいくつかの権限を引き続き拒否される可能性があることです。たとえば、テーブルに対するCONTROLを付与すると同時に、そのテーブルに対するSELECTを拒否して、そこから選択できないようにすることができます。これは、所有者にアクセス許可を付与または拒否できないため、所有者に起こることはありません。 。
スキーマの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;
ここにあなたが得るものがあります:
CREATE TABLE
にしたい場合は、BOLの記事 CREATE TABLE(Transact-SQL) を開き、PERMISSIONSまでスクロールします。
これで、テーブルにCLRユーザー定義型の列が含まれていない場合でも、ユーザーがテーブルを作成できるようにするには、CREATE TABLE
権限が必要です。
テストユーザーは既にスキーマでCONTROL
によってALTER SCHEMA
を暗黙指定していますが、CREATE TABLE
を付与する必要があります(CLRユーザー定義型の場合はREFERENCE
権限も付与する必要があります)。
CONTROL
は、SQL Serverの「セキュリティ保護可能な」オブジェクト(データベースなど)に神のような権限を付与します。