基于默认或显式架构处理 DDL 语句行为 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

基于默认或显式架构处理 DDL 语句行为

使用经 AD 身份验证的会话时,当前会话的默认架构由以下条件决定:

  • 如果存在单独的数据库用户,则该用户的默认架构将被视为当前会话的默认架构。

  • 如果存在组数据库用户的默认架构,则该组数据库用户的默认架构将被视为当前会话的默认架构,其主体 ID 为最小。

了解 CREATE DDL 语句行为

如果未在 CREATE DDL 语句中指定显式架构,则将在当前会话的默认架构中创建对象。如果无法确定架构是默认架构还是显式架构,则 DDL 语句将引发以下错误:

"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."
例 :Windows 组用户的默认架构不存在

Windows 组用户 [corp\accounts-group] 具有 NULL 默认架构,AD 用户 user1 正在尝试在没有显式指定架构的情况下执行 DDL。由于 user1 不存在单独的 Windows 登录名和用户,因此它将仅获得 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.
注意

AD 用户 user1 不存在单独的 Windows 登录名和用户

例 :Windows 组用户存在默认架构

使用 sysadmin 通过默认架构为 [corp\accounts-group] 登录名创建 Windows 组用户。

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)

尝试使用 AD 用户 user1 在不显式指定架构的情况下创建对象。表 t2 将在 [corp\accounts-group] Windows 组用户的默认架构中创建。此对象的所有者将与架构 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)
注意

AD 用户 user1 不存在单独的 Windows 登录名和用户

例 :AD 用户也存在单独的数据库用户

如果 AD 用户也存在单独的数据库用户,则将始终在与单独的数据库用户关联的架构中创建对象。如果数据库用户不存在该架构,将使用 dbo 架构。为 AD 用户 user1 创建单独的 Windows 登录名和数据库用户。使用 sysadmin 登录名通过 TDS 端点进行连接

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)

使用 AD 用户 user1 进行连接,然后尝试在不显式指定架构的情况下创建对象。将在架构 sch1 中创建表 t2。另请注意,此对象的所有者将与架构 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)