web-dev-qa-db-ja.com

所有者をdboに設定して新しいスキーマを作成できないのはなぜですか?

権限を確認するためのテストアカウントを作成しました。現在、Northwindデータベースのdb_datareader、db_datawriter、およびdb_ddladminロールがあります。しかし、Northwindで新しいスキーマを作成しようとしたときに、dboをスキーマの所有者として承認しようとすると、作成が失敗します。

Create Schema Failed

Version: 
SQL Server Management Studio: 15.0.18183.0 
Microsoft Analysis Services Client Tools: 15.0.1487.0 
Microsoft Data Access Components (MDAC): 10.0.18362.1 
Microsoft MSXML: 3.0 6.0 
Microsoft Internet Explorer: 9.11.18362.0 Microsoft 
.NET Framework: 4.0.30319.42000 
Operating System: 10.0.18362
2
J.D.

Db_datareader、db_datawriter、およびdb_ddladmin権限では、このアクションに必要な権限が付与されません。

db_datareader:db_datareader固定データベースロールのメンバーは、すべてのユーザーテーブルからすべてのデータを読み取ることができます。

db_datawriter:db_datawriter固定データベースロールのメンバーは、すべてのユーザーテーブルのデータを追加、削除、または変更できます。

db_ddladmin:db_ddladmin固定データベースロールのメンバーは、データベースで任意のデータ定義言語(DDL)コマンドを実行できます。

ご覧のとおり、これらの権限により、データベース構造を作成および操作する権限が与えられます。ただし、他のユーザーを変更したり、スキーマを作成したりする権限は付与されません

データベースレベルのロールと権限の Microsoft からこの画像を確認してください enter image description here

許可db_ddladminは、SCHEMAを作成する特権を付与しないことに注意してください。これを行うには、test userdb_accessadminのメンバーシップとして設定する必要があります。このロールは、create schemaおよびに特権を付与し、任意のユーザーを変更しますalter any user特権は、dbo userをスキーマ所有者として設定するために必要です。

USE [your_database]
GO
ALTER ROLE [db_accessadmin] ADD MEMBER [teste]
GO

この後、次のような新しいスキーマでDBOを承認できます。

USE [your_database]
GO
CREATE SCHEMA [test] AUTHORIZATION [dbo]
GO

これを行うための権限を付与するもう1つのロールはdb_ownerですが、これには「いくらか強力な」権限があります。そのため、正しい役割はdb_accessadminです。各パーミッションの詳細については this link を参照してください

正しいデータベースで次のコマンドを使用することを忘れないでください。

USE [your_database]
1