Gestión del comportamiento de la instrucción DDL en función de un esquema predeterminado o explícito - Amazon Aurora

Gestión del comportamiento de la instrucción DDL en función de un esquema predeterminado o explícito

Cuando se utiliza una sesión autenticada por AD, el esquema predeterminado de la sesión actual viene determinado por las siguientes condiciones:

  • Si existe un usuario de base de datos individual, el esquema predeterminado del usuario se considera el esquema predeterminado de la sesión actual.

  • Si hay un esquema predeterminado para un usuario de base de datos de grupo, el esquema predeterminado del usuario de la base de datos de grupo se considera el esquema predeterminado de la sesión actual, con el identificador principal más pequeño.

Comprensión del comportamiento de la instrucción CREATE DDL

Si no hay ningún esquema explícito especificado en la instrucción CREATE DDL, la creación del objeto se realizará en el esquema predeterminado de la sesión actual. Si no se puede determinar si el esquema es predeterminado o explícito, la instrucción DDL generará el siguiente error:

"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."
ejemplo : Default schema doesn’t exist for Windows group user

El usuario del grupo de Windows [corp\accounts-group] tiene un esquema predeterminado NULL y user1 de AD está intentando ejecutar la DDL sin especificar el esquema de forma explícita. Como no hay un usuario ni un inicio de sesión de Windows individual para user1, solo obtendrá los privilegios del nivel de base de datos del usuario de grupo de 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

No hay un usuario ni un inicio de sesión de Windows individual para user1 de AD

ejemplo : Default schema exists for Windows group users

Cree un usuario de grupo de Windows para iniciar sesión en [corp accounts-group] con el esquema predeterminado mediante 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)

Intente crear un objeto sin especificar el esquema de forma explícita con user1 de AD. La tabla t2 se creará en el esquema predeterminado del usuario del grupo de Windows [corp\ accounts-group]. El propietario de este objeto será el mismo que el propietario del 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

No hay un usuario ni un inicio de sesión de Windows individual para user1 de AD

ejemplo : Individual database user also exists for an AD user

Si también existe un usuario de base de datos individual para un usuario de AD, los objetos siempre se crearán en el esquema asociado al usuario de base de datos individual. Si no hay un esquema para el usuario de la base de datos, se utilizará el esquema dbo. Cree un usuario de base de datos y un inicio de sesión de Windows individuales para user1 de AD. Conexión a través del punto de conexión de TDS mediante un inicio de sesión 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)

Conéctese con user1 de AD e intente crear el objeto sin especificar el esquema explícitamente. La tabla t2 se creará en el esquema sch1. Tenga en cuenta que el propietario de este objeto será el mismo que el propietario del 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)