デフォルトまたは明示的なスキーマに基づく DDL ステートメントの動作の処理 - Amazon Aurora

デフォルトまたは明示的なスキーマに基づく DDL ステートメントの動作の処理

AD 認証セッションを使用する場合、現在のセッションのデフォルトスキーマは次の条件によって決まります。

  • 個々のデータベースユーザーが存在する場合、ユーザーのデフォルトスキーマは現在のセッションのデフォルトスキーマと見なされます。

  • グループデータベースユーザーのデフォルトスキーマが存在する場合、グループデータベースユーザーのデフォルトスキーマは、最小のプリンシパル ID を持つ現在のセッションのデフォルトスキーマと見なされます。

CREATE DDL ステートメントの動作について

CREATE DDL ステートメントに明示的なスキーマが指定されていない場合、オブジェクトの作成は現在のセッションのデフォルトスキーマで行われます。スキーマがデフォルトか明示的かを判断できない場合、DDL ステートメントは次のエラーをスローします。

"Babelfish Unsupported Command : Schema required for CREATE DDLs when connecting with Active Directory Group authentication. Assign default schema to group user or specify schema in command."
例 : Windows グループユーザー用のデフォルトスキーマが存在しない

Windows グループユーザー [corp\accounts-group] には NULL のデフォルトスキーマがあり、AD ユーザー user1 はスキーマを明示的に指定せずに DDL を実行しようとしています。個々の Windows ログインとユーザーは user1 には存在しないため、Windows グループユーザー [corp\accounts-group] のデータベースレベルの権限のみを取得します。

1> create TABLE t2(a int); 2> GO Msg 33557097, Level 16, State 1, Server db-inst, Line 1 Babelfish Unsupported Command : Schema required for CREATE DDLs when connecting with Active Directory Group authentication. Assign default schema to group user or specify schema in command.
注記

AD ユーザー user1 の個々の Windows ログインとユーザーは存在しません

例 : Windows グループユーザーにデフォルトのスキーマが存在する

sysadmin を使用して、デフォルトスキーマで [corp\accounts-group] ログインのための Windows グループユーザーを作成します。

1> CREATE USER [corp\accounts-group] FOR LOGIN [corp\accounts-group] WITH DEFAULT_SCHEMA = sch_acc; 2> GO 1> CREATE SCHEMA sch_acc AUTHORIZATION [gad\accounts-group]; 2> GO 1> SELECT name, principal_id, default_schema_name FROM sys.database_principals WHERE name = 'corp\accounts-group'; 2> GO name principal_id default_schema_name ------------------ ------------ ------------------- corp\accounts-group 24162 sch_acc (1 rows affected)

AD ユーザー user1 を使用してスキーマを明示的に指定せずにオブジェクトを作成してみてください。テーブル t2 は、[corp\accounts-group] Windows グループユーザーのデフォルトスキーマで作成されます。このオブジェクトの所有者はスキーマ sch_acc の所有者と同じになります。

1> CREATE TABLE t_group(a int); 2> GO 1> SELECT name, schema_name(schema_id) FROM sys.objects WHERE name like 't_group'; 2> GO name schema_name ------- ----------- t_group sch_acc (1 rows affected)
注記

AD ユーザー user1 の個々の Windows ログインとユーザーは存在しません

例 : 個々のデータベースユーザーが AD ユーザーにも存在する

個々のデータベースユーザーが AD ユーザーにも存在する場合、オブジェクトは常に個々のデータベースユーザーに関連付けられたスキーマに作成されます。データベースユーザーにスキーマが存在しない場合、dbo スキーマが使用されます。AD ユーザー user1 の個々の Windows ログインおよびデータベースユーザーを作成します。sysadmin ログインを使用して TDS エンドポイント経由で接続する

1> CREATE LOGIN [corp\user1] FROM WINDOWS; 2> GO 1> CREATE USER [corp\user1] FOR LOGIN [corp\user1] WITH DEFAULT_SCHEMA = sch1; 2> GO 1> CREATE SCHEMA sch1 AUTHORIZATION [corp\user1]; 2> GO 1> SELECT name, default_schema_name FROM sys.database_principals WHERE name = 'corp\user1'; 2> GO name default_schema_name --------- ------------------- corp\user1 sch1 (1 rows affected)

AD ユーザー user1 を使用して接続し、スキーマを明示的に指定せずにオブジェクトを作成してみてください。テーブル t2 はスキーマ sch1 で作成されます。また、このオブジェクトの所有者はスキーマ sch1 の所有者と同じであることに注意してください。

1> CREATE TABLE t2(a int); 2> GO 1> SELECT name, schema_name(schema_id) FROM sys.objects WHERE name like 't2'; 2> GO name schema_name ---- ----------- t2 sch1 (1 rows affected)