Menangani perilaku DDL Pernyataan berdasarkan skema default atau eksplisit - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menangani perilaku DDL Pernyataan berdasarkan skema default atau eksplisit

Saat menggunakan sesi yang diautentikasi AD, skema default untuk sesi saat ini ditentukan oleh kondisi berikut:

  • Jika pengguna database individu ada, skema default pengguna dianggap sebagai skema default sesi saat ini.

  • Jika skema default untuk pengguna database grup ada, skema default pengguna database grup dianggap sebagai skema default sesi saat ini dengan id utama terkecil.

Memahami perilaku CREATE DDL pernyataan

Jika tidak ada skema eksplisit yang ditentukan dalam CREATE DDL pernyataan maka pembuatan objek akan berlangsung dalam skema default sesi saat ini. Jika skema tidak dapat ditentukan apakah default atau eksplisit, maka DDL pernyataan tersebut akan memunculkan kesalahan berikut:

"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."
contoh : Skema default tidak ada untuk pengguna grup Windows

Pengguna grup Windows [corp\ accounts-group] memiliki skema NULL default dan pengguna AD user1 mencoba melakukan tanpa menentukan skema secara eksplisit. DDL Karena login windows individu dan pengguna tidak ada untuk user1, itu akan mendapatkan hak istimewa tingkat database pengguna grup Windows [corp\ accounts-group] saja.

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.
catatan

Login dan pengguna windows individual tidak ada untuk pengguna pengguna AD1

contoh : Skema default ada untuk pengguna grup Windows

Buat pengguna grup Windows untuk login [corp\ accounts-group] dengan skema default menggunakan sysadmin.

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)

Coba buat objek tanpa menentukan skema secara eksplisit menggunakan pengguna AD user1. Tabel t2 akan dibuat dalam skema default [corp\ accounts-group] Pengguna grup Windows Pemilik objek ini akan sama dengan pemilik skema 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)
catatan

Login dan pengguna windows individual tidak ada untuk pengguna pengguna AD1

contoh : Pengguna database individu juga ada untuk pengguna AD

Jika pengguna database individu juga ada untuk pengguna AD maka objek akan selalu dibuat dalam skema yang terkait dengan pengguna database individu. Jika skema tidak ada untuk pengguna database maka skema dbo akan digunakan. Buat login windows individual dan pengguna database untuk pengguna pengguna AD1. Connect melalui TDS endpoint menggunakan login sysadmin

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)

Connect menggunakan pengguna AD user1 dan coba buat objek tanpa menentukan skema secara eksplisit. Tabel t2 akan dibuat dalam skema sch1. Perhatikan juga bahwa pemilik objek ini akan sama dengan pemilik skema 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)