データベース スキーマの作成
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
この記事では、SQL Server Management Studio または Transact-SQL を使用して、SQL Server でスキーマを作成する方法について説明します。
制限事項と制約事項
新しいスキーマは、データベース ユーザー、データベース ロール、またはアプリケーション ロールのいずれかのデータベース レベルのプリンシパルが所有します。 スキーマ内に作成されるオブジェクトはスキーマの所有者が所有し、 sys.objects 内の principal_idは NULL になります。 スキーマが含まれるオブジェクトの所有権は、データベース レベルのプリンシパルに譲渡できますが、スキーマ内のオブジェクトに対する CONTROL 権限は常にスキーマ所有者が保持します。
データベース オブジェクトを作成する場合に、有効なドメイン プリンシパル (ユーザーまたはグループ) をオブジェクト所有者として指定すると、ドメイン プリンシパルがスキーマとしてデータベースに追加されます。 新しいスキーマは、そのドメイン プリンシパルが所有します。
アクセス許可
データベースに対する CREATE SCHEMA 権限が必要です。
別のユーザーを、作成されるスキーマの所有者として指定する場合、呼び出し元は、そのユーザーに対する IMPERSONATE 権限を持っている必要があります。 データベース ロールを所有者として指定する場合、呼び出し元は、データベース ロールのメンバーシップまたはデータベース ロールに対する ALTER アクセス許可のいずれかを持っている必要があります。
SQL Server Management Studio を使用したスキーマの作成
オブジェクト エクスプローラーで、 [データベース] フォルダーを展開します。
新しいデータベース スキーマを作成するデータベースを展開します。
[セキュリティ] フォルダーを右クリックし、 [新規作成]をポイントして、 [スキーマ]をクリックします。
[スキーマ - 新規作成] ダイアログ ボックスの [全般] ページで、 [スキーマ名] ボックスに新しいスキーマの名前を入力します。
[スキーマの所有者] ボックスに、スキーマを所有するデータベース ユーザーまたはロールの名前を入力します。 または、[検索] を選択して [ロールとユーザーの検索] ダイアログ ボックスを開きます。
[OK] を選択します。
Note
Azure SQL Database または Azure Synapse Analytics に対する SSMS を使用してスキーマを作成している場合、ダイアログ ボックスは表示されません。 生成されたスキーマ テンプレート作成 T-SQL ステートメントを実行する必要があります。
追加オプション
[スキーマ - 新規] ダイアログ ボックスには、[権限] と [拡張プロパティ] という 2 つのページもあり、それぞれにオプションが用意されています。
[権限] ページには、すべてのセキュリティ保護可能なリソースと、ログインに付与できる、セキュリティ保護可能なリソースに対する権限が一覧表示されます。
[拡張プロパティ] ページでは、カスタム プロパティをデータベース ユーザーに追加できます。
Transact-SQL を使用してスキーマを作成する
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで、 [新しいクエリ] を選択します。
次の例では、
Chains
という名前のスキーマを作成した後、Sizes
という名前のテーブルを作成します。CREATE SCHEMA Chains; GO CREATE TABLE Chains.Sizes (ChainID int, width dec(10,2));
その他のオプションは、単一のステートメントで実行できます。 次の例では、
Joe
が所有するスキーマSprockets
を作成します。このスキーマにはテーブルNineProngs
が含まれます。 このステートメントでは、SELECT
に対してBob
を許可し、SELECT
に対してJohn
を拒否します。CREATE SCHEMA Sprockets AUTHORIZATION Joe CREATE TABLE NineProngs (source int, cost int, partnumber int) GRANT SELECT ON SCHEMA::Sprockets TO Bob DENY SELECT ON SCHEMA::Sprockets TO John; GO
現在のデータベース内のスキーマを表示するには、次のステートメントを実行します。
SELECT * FROM sys.schemas;