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>
GOMsg 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>
GO1>
CREATE SCHEMA sch_acc AUTHORIZATION [gad\accounts-group];2>
GO1>
SELECT name, principal_id, default_schema_name FROM sys.database_principals WHERE name = 'corp\accounts-group';2>
GOname 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>
GO1>
SELECT name, schema_name(schema_id) FROM sys.objects WHERE name like 't_group';2>
GOname 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>
GO1>
CREATE USER [corp\user1] FOR LOGIN [corp\user1] WITH DEFAULT_SCHEMA = sch1;2>
GO1>
CREATE SCHEMA sch1 AUTHORIZATION [corp\user1];2>
GO1>
SELECT name, default_schema_name FROM sys.database_principals WHERE name = 'corp\user1';2>
GOname 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>
GO1>
SELECT name, schema_name(schema_id) FROM sys.objects WHERE name like 't2';2>
GOname schema_name ---- ----------- t2 sch1 (1 rows affected)