SQL Server(2008)では、スキーマ内でテーブルの作成権限を付与できますか?


14

SQL Server 2008のセキュリティを使用して、特定のスキーマ内でのみCREATE TABLE権限をユーザーに付与しようとしています。CREATE TABLE権限はデータベースレベルでのみ適用されますか?

スキーマ内でのみテーブルを作成するようにユーザーを制限できますか?

私はもう試した:

USE [databasename]
GRANT CONTROL ON Schema :: [schemaname] TO [username]
GO

そして

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GO

ただし、ユーザーはまだターゲットスキーマ内にテーブルを作成できません。これを実行するまで、ユーザーがテーブルを作成できるようになるまではそうではありません。

USE [databasename]
GRANT CREATE TABLE to [username]
GO

付与

データベース権限の付与

回答:


12

SQL Server 2008ヘルプによると:

データベースのCREATE TABLEパーミッションと、テーブルが作成されるスキーマのALTERパーミッションが必要です。

テストデータベースでEXECUTE ASを使用してこれをテストしましたが、ALTERアクセス許可を持つスキーマにテーブルを作成できましたが、dboスキーマ(ALTERアクセス許可を付与していません)では作成できませんでした。そのため、スキーマに対するALTERパーミッションでリベラルになりすぎない限り、これがその方法です。


1
はい、わかりました。ユーザーにはデータベースレベルの「CREATE TABLE」権限がありますが、他の権限が付与されていないスキーマにテーブルを作成することはできません。
ライアン

このシナリオを有効にするためだけに、ブランケットCREATE TABLE権限を付与する必要があることは間違いなく不幸なようです。
MgSam

6

特定のデータベースの特定のユーザーにテーブルを作成する権限を付与するには、CREATE TABLE権限だけでなく、スキーマ(DBOなど)に対するALTER権限も必要です。

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GRANT CREATE TABLE TO [username]
GO

例えば;

USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO

1

2008 R2のスキーマに適用されるアクセス許可のドキュメントには、そのようなアクセス許可については何もありません:http : //msdn.microsoft.com/en-us/library/ms187940.aspx

したがって、私は結論付けます:いいえ、できません。createtableはデータベースレベルでのみ制御できます(これはすべてのセキュリティ保護可能なものに適用されるようです)。


おかげで、私は同意する、そのレベルについては何もありません。@ db2が指摘したように、データベースレベルの "CREATE TABLE"権限は、スキーマに対する他の権限がない場合にユーザーがテーブルを作成できるようにするのに十分ではありません。
-RyanW

0

もちろんできます。user1がある場合、そのデフォルトスキーマもuser1として定義します。このユーザーにデータベース権限でCREATE TABLEを許可します。それでおしまい。user1は、user1スキーマ内にのみテーブルを作成できます。

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