Applies to:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric のウェアハウス
現在のデータベースにスキーマを作成します。
CREATE SCHEMA
トランザクションでは、新しいスキーマ内にテーブルとビューを作成し、それらのオブジェクトに対するGRANT
、DENY
、またはREVOKE
アクセス許可を設定することもできます。
構文
SQL Server および Azure SQL データベース の構文
CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]
<schema_name_clause> ::=
{
schema_name
| AUTHORIZATION owner_name
| schema_name AUTHORIZATION owner_name
}
<schema_element> ::=
{
table_definition | view_definition | grant_statement |
revoke_statement | deny_statement
}
Azure Synapse Analytics と Parallel Data Warehouse の構文。
CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]
引数
schema_name
データベース内のスキーマの名前を指定します。
オーソリ イowner_name
スキーマを所有するデータベース レベルのプリンシパルの名前を指定します。 このプリンシパルは、他のスキーマを所有している可能性があり、現在のスキーマを既定のスキーマとして使用しない場合があります。
table_definition
スキーマ内にテーブルを作成する CREATE TABLE
ステートメントを指定します。 このステートメントを実行するプリンシパルには、現在のデータベースに対する CREATE TABLE
権限が必要です。
view_definition
スキーマ内にビューを作成する CREATE
VIEW ステートメントを指定します。 このステートメントを実行するプリンシパルには、現在のデータベース CREATE
VIEW 権限が必要です。
grant_statement
新しいスキーマを除くセキュリティ保護可能なリソースに対するアクセス許可を付与する GRANT
ステートメントを指定します。
revoke_statement
新しいスキーマを除くセキュリティ保護可能なリソースに対するアクセス許可を取り消す REVOKE
ステートメントを指定します。
deny_statement
新しいスキーマを除くセキュリティ保護可能なリソースに対するアクセス許可を拒否する DENY
ステートメントを指定します。
解説
CREATE SCHEMA AUTHORIZATION
を含むが、名前を指定しないステートメントは、下位互換性のためにのみ許可されます。 このステートメントではエラーは発生しませんが、スキーマは作成されません。
CREATE SCHEMA
では、1 つのステートメントでセキュリティ保護可能な任意のセキュリティ保護可能な権限に対するスキーマ、それに含まれるテーブルとビュー、 GRANT
、 REVOKE
、または DENY
アクセス許可を作成できます。 このステートメントは、別のバッチとして実行する必要があります。
CREATE SCHEMA
ステートメントによって作成されたオブジェクトは、作成するスキーマ内に作成されます。
CREATE SCHEMA
トランザクションはアトミックです。
CREATE SCHEMA
ステートメントの実行中にエラーが発生した場合、指定されたセキュリティ保護可能なリソースは作成されません。アクセス許可は付与されません。
他のビューを参照するビューを除き、 CREATE SCHEMA
によって作成されるセキュリティ保護可能なリソースを任意の順序で一覧表示できます。 この場合、参照先のビューは参照元のビューより前に作成しておく必要があります。
そのため、GRANT
ステートメントは、オブジェクト自体が作成される前にオブジェクトに対するアクセス許可を付与できます。または、ビューによって参照されるテーブルを作成するCREATE TABLE
ステートメントの前にCREATE VIEW
ステートメントを指定できます。 また、 CREATE TABLE
ステートメントでは、 CREATE SCHEMA
ステートメントの後半で定義されたテーブルに対して外部キーを宣言できます。
注
DENY
および REVOKE
は、 CREATE SCHEMA
ステートメント内でサポートされています。
DENY
句と REVOKE
句は、 CREATE SCHEMA
ステートメントに表示される順序で実行されます。
CREATE SCHEMA
を実行するプリンシパルは、作成するスキーマの所有者として別のデータベース プリンシパルを指定できます。 この操作には、この記事の後半の「 アクセス許可」 セクションで説明するように、追加のアクセス許可が必要です。
新しいスキーマは、データベース ユーザー、データベース ロール、またはアプリケーション ロールのいずれかのデータベース レベルのプリンシパルが所有します。 スキーマ内で作成されたオブジェクトは、スキーマの所有者によって所有され、sys.objects
に null principal_id
があります。 スキーマに含まれるオブジェクトの所有権は任意のデータベース レベルプリンシパルに転送できますが、スキーマ所有者は常にスキーマ内のオブジェクトに対する CONTROL
権限を保持します。
注
スキーマは、データベース ユーザーと同等ではありません。 システム カタログ ビューを使用して、データベース ユーザーとスキーマの違いを特定します。
暗黙的なスキーマとユーザーの作成
注
Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。
場合によっては、ユーザーはデータベース ユーザー アカウント (データベース内のデータベース プリンシパル) を持たずにデータベースを使用できます。 この状態は、次の状況で発生する可能性があります。
ログインには
CONTROL SERVER
特権があります。Windows ユーザーは、個々のデータベース ユーザー アカウント (データベース内のデータベース プリンシパル) を持っていませんが、データベース ユーザー アカウント (Windows グループのデータベース プリンシパル) を持つ Windows グループのメンバーとしてデータベースにアクセスします。
Microsoft Entra ユーザーには、個々のデータベース ユーザー アカウント (データベース内のデータベース プリンシパル) はありませんが、データベース ユーザー アカウント (Microsoft Entra グループのデータベース プリンシパル) を持つ Microsoft Entra グループのメンバーとしてデータベースにアクセスします。
データベース ユーザー アカウントを持たないユーザーが、既存のスキーマを指定せずにオブジェクトを作成すると、そのユーザーのデータベース プリンシパルと既定のスキーマがデータベースに自動的に作成されます。 作成されたデータベース プリンシパルとスキーマの名前は、ユーザーが SQL Server に接続するときに使用した名前 (SQL Server 認証ログイン名または Windows ユーザー名) と同じです。
この動作が必要なのは、ユーザーが Windows グループに基づいてオブジェクトを作成および所有できるようにするためです。 ただし、スキーマとユーザーが意図せず作成される可能性があります。 ユーザーおよびスキーマが暗黙的に作成されないように、可能な限り、明示的にデータベース プリンシパルを作成して既定のスキーマを割り当てます。 または、データベース内にオブジェクトを作成するときに、2 部または 3 部構成のオブジェクト名を使用して既存のスキーマを明示的に指定します。
SQL Database では、Microsoft Entra ユーザーを暗黙的に作成することはできません。 外部プロバイダーから Microsoft Entra ユーザーを作成するには、Microsoft Entra ID でユーザーの状態を確認する必要があるため、ユーザーの作成はエラー 2760: The specified schema name "<user@domain>" either does not exist or you do not have permission to use it.
And then error 2759 で失敗します。 CREATE SCHEMA failed due to previous errors.
スキーマを作成または変更しようとすると、エラー 15151: Cannot find the user '', because it does not exist or you do not have permission.
、エラー 2759 が続きます。 これらのエラーを回避するには、外部プロバイダーから Microsoft Entra ユーザーを作成するか、Microsoft Entra グループを変更して既定のスキーマを割り当てます。 その後、オブジェクトを作成するステートメントを再実行します。
Microsoft Fabric の SQL 分析エンドポイントと Warehouse では、スキーマ名に /
や \
を含めたり、 .
で終わったりすることはできません。
非推奨の通知
CREATE SCHEMA
スキーマ名を指定しないステートメントは、下位互換性のために現在サポートされています。 これらのステートメントは、実際にはデータベースにスキーマを作成しませんが、テーブルとビューを作成し、アクセス許可を付与します。 この以前の形式のCREATE SCHEMA
を実行するために、プリンシパルCREATE SCHEMA
アクセス許可は必要ありません。スキーマは作成されていないためです。 この機能は SQL Server の今後のリリースでは削除される予定です。
アクセス許可
データベース CREATE SCHEMA
アクセス許可が必要です。
CREATE SCHEMA
ステートメント内で指定されたオブジェクトを作成するには、対応するCREATE
権限が必要です。
作成するスキーマの所有者として別のユーザーを指定するには、呼び出し元にそのユーザーに対する IMPERSONATE
アクセス許可が必要です。 データベース ロールが所有者として指定されている場合、呼び出し元にはロールのメンバーシップまたはロールに対する ALTER
アクセス許可のいずれかが必要です。
下位互換性のある構文では、スキーマが作成されていないため、 CREATE SCHEMA
に対するアクセス許可はチェックされません。
例
A。 スキーマを作成し、アクセス許可を付与する
次の例では、Sprockets
が所有するスキーマ Annik
を作成します。このスキーマにはテーブル NineProngs
が含まれます。 このステートメントでは、SELECT
に対して Mandar
を許可し、SELECT
に対して Prasanna
を拒否します。
Sprockets
と NineProngs
は 1 つのステートメントで作成されます。
USE AdventureWorks2022;
GO
CREATE SCHEMA Sprockets AUTHORIZATION Annik
CREATE TABLE NineProngs
(
source INT,
cost INT,
partnumber INT
)
GRANT SELECT ON SCHEMA::Sprockets TO Mandar
DENY SELECT ON SCHEMA::Sprockets TO Prasanna;
GO
例: Azure Synapse Analytics、Analytics Platform System (PDW)
B. スキーマとスキーマ内のテーブルを作成する
次の例では、スキーマ Sales
を作成した後、そのスキーマ内にテーブル Sales.Region
を作成します。
CREATE SCHEMA Sales;
GO
CREATE TABLE Sales.Region
(
Region_id INT NOT NULL,
Region_Name CHAR (5) NOT NULL
)
WITH (DISTRIBUTION = REPLICATE);
GO
C. スキーマの所有者を設定する
次の例では、 Production
スキーマを作成し、 Mary
を所有者として設定します。
CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];
GO