ユーザーが自分のスキーマ内で何でもできるようにするが、スキーマ自体を作成または削除しない


12

SQL Azureでスキーマを作成し、データベースロールに次のアクセス許可を付与しました。

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW 
DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;

上記で定義したアクセス許可により、myuser自分のスキーマを作成/削除できるため、問題を克服するために、ALTER ANY SCHEMAアクセス許可を試しました。しかし、この許可はユーザーがテーブルを作成/削除することも拒否します。

ユーザーが自分のスキーマ内で何でもできるが、スキーマ自体を作成または削除できないようにするには、どのような権限が必要ですか?

回答:


8

CONTROLスキーマに付与する必要はありません。
必要な権限DROP SCHEMACONTROL、スキーマALTER ANY SCHEMAレベルまたはデータベースレベルのいずれかであるため、ユーザーはスキーマを削除できました。これら2つのアクセス許可を削除すると、ロールに関連付けられたユーザーがスキーマを作成および削除できなくなります(もちろん、より高いレベルのアクセス許可がない限り)。

必要な許可CREATE ALTER及びDROPその他のオブジェクトであるCREATEと組み合わせたオブジェクト型(表\手順\関数\ビュー)の許可ALTERスキーマに許可。
スクリプトにはこれらの権限が既にあるため、必要なことはCONTROL権限を削除することだけです。参照用に、すべてのオブジェクトタイプに必要な権限を見つけることができるステートメントのBOLリストを以下にDDL示します。

怠け者のために、不必要な許可を削除した後のコードは次のとおりです。

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT,
          UPDATE, VIEW DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;

しかし、ユーザーは他のスキーマの下にもオブジェクトを作成できますか?
u23432534

3

新しいスキーマには「dbo」の権限があるため、ユーザーはスキーマがdboによって所有されているすべてのデータベースオブジェクトに間接的にアクセスできます。

例:

select * from dbo.test; --fails

create view myschema.test
as 
select * 
from dbo.test; --view is created

select * from myschema.test;  --contents of dbo.test now revealed.

これは、SQL Serverエンジンの正しい動作です。許可は、同じ許可で他のスキーマに浸透します。そのようなアクセスを制限するために、スキーマ作成のオプションを以下に示します。

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