Tratar o comportamento da declaração DDL com base no esquema padrão ou explícito - Amazon Aurora

Tratar o comportamento da declaração DDL com base no esquema padrão ou explícito

Ao usar uma sessão autenticada pelo AD, o esquema padrão da sessão atual é determinado pelas seguintes condições:

  • Se existir um usuário individual do banco de dados, o esquema padrão do usuário será considerado o esquema padrão da sessão atual.

  • Se o esquema padrão para um usuário do banco de dados de grupo existir, esse esquema será considerado o esquema padrão da sessão atual com o menor ID da entidade principal.

Noções básicas sobre o comportamento da declaração CREATE DDL

Se não houver um esquema explícito especificado na declaração CREATE DDL, a criação do objeto ocorrerá no esquema padrão da sessão atual. Se não for possível determinar se o esquema é padrão ou explícito, a declaração DDL gerará o seguinte erro:

"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."
exemplo : o esquema padrão não existe para o usuário do grupo do Windows.

O usuário do grupo do Windows [corp\accounts-group] tem um esquema padrão NULL e o user1 do AD está tentando executar o DDL sem especificar o esquema explicitamente. Como o login e usuário individuais do Windows não existem para user1, ele receberá os privilégios de nível de banco de dados somente do usuário do grupo do 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

O login e usuário individuais do Windows não existem para o user1 do AD.

exemplo : existe um esquema padrão para usuários do grupo do Windows.

Crie um usuário de grupo do Windows para login [corp\accounts-group] com esquema padrão usando 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)

Tente criar um objeto sem especificar explicitamente o esquema usando o user1 do AD. A tabela t2 será criada no esquema padrão do usuário do grupo do Windows [corp\accounts-group]. O proprietário desse objeto será o mesmo proprietário do esquema 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

O login e usuário individuais do Windows não existem para o user1 do AD.

exemplo : o usuário individual do banco de dados também existe para um usuário do AD.

Se também existir um usuário de banco de dados individual para um usuário do AD, os objetos sempre serão criados no esquema associado ao usuário individual do banco de dados. Se o esquema não existir para o usuário do banco de dados, o esquema dbo será usado. Crie um login e um usuário de banco de dados individuais do Windows para o user1 do AD. Conectar-se por meio do endpoint TDS usando um login de administrador do sistema

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)

Conecte-se utilizando o user1 do AD e tente criar um objeto sem especificar explicitamente o esquema. A tabela t2 será criada no esquema sch1. Observe também que o proprietário desse objeto será o mesmo do esquema 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)