기본 또는 명시적 스키마를 기반으로 DDL 문 동작 처리 - Amazon Aurora

기본 또는 명시적 스키마를 기반으로 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을 사용하여 연결하고, 스키마를 명시적으로 지정하지 않고 객체를 만들어 보세요. 표 t2는 스키마 sch1에 생성됩니다. 또한 이 객체의 소유자는 스키마 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)