Gestione del comportamento delle DDL dichiarazioni basato su uno schema predefinito o esplicito - Amazon Aurora

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Gestione del comportamento delle DDL dichiarazioni basato su uno schema predefinito o esplicito

Quando si utilizza una sessione autenticata da AD, lo schema predefinito per la sessione corrente è determinato dalle seguenti condizioni:

  • Se esiste un singolo utente del database, lo schema predefinito dell'utente viene considerato lo schema predefinito della sessione corrente.

  • Se esiste lo schema predefinito per un utente del database di gruppo, lo schema predefinito dell'utente del database di gruppo viene considerato lo schema predefinito della sessione corrente con l'ID principale più piccolo.

Comprensione del comportamento delle CREATE DDL dichiarazioni

Se non è specificato uno schema esplicito nell'CREATEDDListruzione, la creazione dell'oggetto avverrà nello schema predefinito della sessione corrente. Se non è possibile determinare se lo schema è predefinito o esplicito, l'DDListruzione genererà il seguente errore:

"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."
Esempio : lo schema predefinito non esiste per gli utenti del gruppo Windows

L'utente del gruppo Windows [corp\ accounts-group] ha uno schema NULL predefinito e l'utente AD user1 sta tentando di eseguirlo DDL senza specificare lo schema in modo esplicito. Poiché l'accesso e l'utente a Windows individuali non esistono per user1, otterrà solo i privilegi a livello di database dell'utente del gruppo 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.
Nota

L'accesso e l'utente Windows individuali non esistono per l'utente AD user1

Esempio : esiste uno schema predefinito per gli utenti del gruppo Windows

Crea un utente di gruppo Windows per l'accesso a [corp\ accounts-group] con lo schema predefinito utilizzando 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)

Prova a creare un oggetto senza specificare lo schema in modo esplicito utilizzando l'utente AD user1. La tabella t2 verrà creata nello schema predefinito di [corp\ accounts-group] Utente del gruppo Windows Il proprietario di questo oggetto sarà lo stesso del proprietario dello schema 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)
Nota

L'accesso e l'utente Windows individuali non esistono per l'utente AD user1

Esempio : esiste anche un utente del database individuale per un utente AD

Se esiste anche un singolo utente del database per un utente AD, gli oggetti verranno sempre creati nello schema associato al singolo utente del database. Se lo schema non esiste per l'utente del database, verrà utilizzato lo schema dbo. Crea un login di Windows individuale e un utente del database per l'utente AD user1. Connect tramite TDS endpoint utilizzando un accesso 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)

Connettiti utilizzando l'utente AD user1 e prova a creare un oggetto senza specificare lo schema in modo esplicito. La tabella t2 verrà creata nello schema sch1. Si noti inoltre che il proprietario di questo oggetto sarà lo stesso del proprietario dello schema 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)