다음을 통해 공유


CREATE SCHEMA(Transact-SQL)

현재 데이터베이스에 스키마를 만듭니다. CREATE SCHEMA 트랜잭션에서는 새 스키마 내에 테이블과 뷰를 만들고 해당 개체에 대한 GRANT, DENY 또는 REVOKE 권한을 설정할 수도 있습니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]

<schema_name_clause> ::=
    {
    schema_name
    | AUTHORIZATION owner_name
    | schema_name AUTHORIZATION owner_name
    }

<schema_element> ::= 
    { 
        table_definition | view_definition | grant_statement | 
        revoke_statement | deny_statement 
    }

인수

  • schema_name
    데이터베이스 내에서 스키마를 식별하는 이름입니다.

  • AUTHORIZATION owner_name
    스키마를 소유하게 될 데이터베이스 수준 보안 주체의 이름을 지정합니다. 이 보안 주체는 다른 스키마를 소유할 수 있으며 현재 스키마를 기본 스키마로 사용하지 않을 수도 있습니다.

  • table_definition
    스키마 내에서 테이블을 만드는 CREATE TABLE 문을 지정합니다. 이 문을 실행하는 보안 주체에게 현재 데이터베이스에 대한 CREATE TABLE 권한이 있어야 합니다.

  • view_definition
    스키마 내에서 뷰를 만드는 CREATE VIEW 문을 지정합니다. 이 문을 실행하는 보안 주체에게 현재 데이터베이스에 대한 CREATE VIEW 권한이 있어야 합니다.

  • grant_statement
    새 스키마를 제외한 모든 보안 개체에 대한 사용 권한을 부여하는 GRANT 문을 지정합니다.

  • revoke_statement
    새 스키마를 제외한 모든 보안 개체에 대한 사용 권한을 취소하는 REVOKE 문을 지정합니다.

  • deny_statement
    새 스키마를 제외한 모든 보안 개체에 대한 사용 권한을 거부하는 DENY 문을 지정합니다.

주의

[!참고]

CREATE SCHEMA AUTHORIZATION을 포함하지만 이름을 지정하지 않는 문은 이전 버전과의 호환성을 위해서만 허용됩니다.

CREATE SCHEMA는 스키마와 이에 포함된 테이블 및 뷰를 만들 수 있으며 단일 문에서 모든 보안 개체에 대한 GRANT, REVOKE 또는 DENY 권한을 만들 수 있습니다. 이 문은 별도의 일괄 처리로 실행해야 합니다. CREATE SCHEMA 문으로 만드는 개체는 생성되는 스키마 내부에 생성됩니다.

CREATE SCHEMA 트랜잭션은 원자성을 갖습니다. CREATE SCHEMA 문을 실행하는 동안 오류가 발생하는 경우 지정한 보안 개체는 생성되지 않으며 사용 권한은 부여되지 않습니다.

CREATE SCHEMA로 만든 보안 개체는 다른 뷰를 참조하는 뷰를 제외하면 순서에 관계없이 나열할 수 있습니다. 다른 뷰를 참조하는 뷰의 경우에는 참조하는 뷰보다 참조되는 뷰를 먼저 만들어야 합니다.

따라서 GRANT 문은 개체를 만들기 전에 개체에 대한 사용 권한을 부여할 수 있으며 CREATE VIEW 문은 뷰가 참조하는 테이블을 만드는 CREATE TABLE 문에 앞서 표시될 수 있습니다. 또한 CREATE TABLE 문은 CREATE SCHEMA문에 나중에 정의된 테이블에 대한 외래 키를 선언할 수 있습니다.

[!참고]

CREATE SCHEMA 문 내에서 DENY 및 REVOKE를 사용할 수 있습니다. DENY 및 REVOKE 절은 CREATE SCHEMA 문에 표시되는 순서대로 실행됩니다.

CREATE SCHEMA를 실행하는 보안 주체는 다른 데이터베이스 보안 주체를 생성될 스키마의 소유자로 지정할 수 있습니다. 이렇게 하려면 이 항목의 뒷부분에 나오는 "사용 권한" 섹션에서 설명하는 추가 사용 권한이 필요합니다.

새 스키마는 데이터베이스 수준 보안 주체인 데이터베이스 사용자, 데이터베이스 역할 또는 응용 프로그램 역할 중 하나가 소유합니다. 스키마 내에서 만든 개체는 스키마 소유자가 소유하며 sys.objects의 principal_id가 NULL입니다. 스키마 포함 개체의 소유권을 모든 데이터베이스 수준 보안 주체에게 이전할 수 있지만 스키마 소유자는 항상 스키마 내의 개체에 대한 CONTROL 권한을 갖고 있어야 합니다.

주의 사항주의

SQL Server 2005부터 스키마 동작이 변경되었습니다. 이에 따라 스키마가 데이터베이스 사용자와 같다고 가정하는 코드에서 올바른 결과가 반환되지 않을 수 있습니다. sysobjects를 비롯한 이전 카탈로그 뷰는 CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION 등의 DDL 문이 사용된 데이터베이스에서 사용하지 않아야 합니다. 이러한 데이터베이스에서는 새 카탈로그 뷰를 대신 사용해야 합니다. 새 카탈로그 뷰에서는 SQL Server 2005에 도입된 보안 주체와 스키마의 분리를 고려하고 있습니다. 카탈로그 뷰에 대한 자세한 내용은 카탈로그 뷰(Transact-SQL)를 참조하십시오.

데이터베이스 개체를 만들 때 개체 소유자로 유효한 도메인 보안 주체(사용자 또는 그룹)를 지정하면 도메인 보안 주체는 데이터베이스에 스키마로 추가됩니다. 새 스키마는 도메인 보안 주체가 소유하게 됩니다.

사용 중단 고지 사항

스키마 이름을 지정하지 않는 CREATE SCHEMA 문은 이전 버전과의 호환성을 위해 현재 지원됩니다. 이 문은 데이터베이스 내부에 실제로 스키마를 만들지는 않지만 테이블과 뷰를 만들고 사용 권한을 부여합니다. 스키마가 생성되지 않기 때문에 보안 주체에게는 이러한 이전 형식의 CREATE SCHEMA를 실행하는 데 CREATE SCHEMA 권한이 필요하지 않습니다. SQL Server의 다음번 릴리스에서는 이 기능이 제거될 예정입니다.

사용 권한

데이터베이스에 대한 CREATE SCHEMA 권한이 필요합니다.

CREATE SCHEMA 문 내에서 지정한 개체를 만들려면 사용자에게 해당 CREATE 권한이 있어야 합니다.

다른 사용자를 생성되는 스키마의 소유자로 지정하려면 호출자에게 해당 사용자에 대한 IMPERSONATE 권한이 있어야 합니다. 데이터베이스 역할을 소유자로 지정하는 경우 호출자에게 해당 역할의 멤버 자격이나 해당 역할에 대한 ALTER 권한이 있어야 합니다.

[!참고]

이전 버전과 호환되는 구문을 사용하면 스키마가 생성되지 않기 때문에 CREATE SCHEMA 권한이 확인되지 않습니다.

다음 예에서는 Annik가 소유하고 NineProngs 테이블을 포함하는 Sprockets 스키마를 만듭니다. 이 문에서는 Mandar에게 SELECT 권한을 부여하고 Prasanna에게는 SELECT 권한을 거부합니다. Sprockets 및 NineProngs는 단일 문으로 생성됩니다.

USE AdventureWorks2008R2;
GO
CREATE SCHEMA Sprockets AUTHORIZATION Annik
    CREATE TABLE NineProngs (source int, cost int, partnumber int)
    GRANT SELECT ON SCHEMA::Sprockets TO Mandar
    DENY SELECT ON SCHEMA::Sprockets TO Prasanna;
GO