CREATE SCHEMA(Transact-SQL)CREATE SCHEMA (Transact-SQL)

이 항목은 다음에 적용됩니다. 예SQL Server(2008부터)예Azure SQL Database예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

현재 데이터베이스에 스키마를 만듭니다.Creates a schema in the current database. CREATE SCHEMA 트랜잭션에서는 새 스키마 내에 테이블과 뷰를 만들고 해당 개체에 대한 GRANT, DENY 또는 REVOKE 권한을 설정할 수도 있습니다.The CREATE SCHEMA transaction can also create tables and views within the new schema, and set GRANT, DENY, or REVOKE permissions on those objects.

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

-- Syntax for SQL Server and Azure SQL Database  

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   
    }  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]  

인수Arguments

schema_nameschema_name
데이터베이스 내에서 스키마를 식별하는 이름입니다.Is the name by which the schema is identified within the database.

권한 부여 owner_nameAUTHORIZATION owner_name
스키마를 소유하게 될 데이터베이스 수준 보안 주체의 이름을 지정합니다.Specifies the name of the database-level principal that will own the schema. 이 보안 주체는 다른 스키마를 소유할 수 있으며 현재 스키마를 기본 스키마로 사용하지 않을 수도 있습니다.This principal may own other schemas, and may not use the current schema as its default schema.

테이블table_definition
스키마 내에서 테이블을 만드는 CREATE TABLE 문을 지정합니다.Specifies a CREATE TABLE statement that creates a table within the schema. 이 문을 실행하는 보안 주체에게 현재 데이터베이스에 대한 CREATE TABLE 권한이 있어야 합니다.The principal executing this statement must have CREATE TABLE permission on the current database.

view_definitionview_definition
스키마 내에서 뷰를 만드는 CREATE VIEW 문을 지정합니다.Specifies a CREATE VIEW statement that creates a view within the schema. 이 문을 실행하는 보안 주체에게 현재 데이터베이스에 대한 CREATE VIEW 권한이 있어야 합니다.The principal executing this statement must have CREATE VIEW permission on the current database.

grant_statementgrant_statement
새 스키마를 제외한 모든 보안 개체에 대한 사용 권한을 부여하는 GRANT 문을 지정합니다.Specifies a GRANT statement that grants permissions on any securable except the new schema.

revoke_statementrevoke_statement
새 스키마를 제외한 모든 보안 개체에 대한 사용 권한을 취소하는 REVOKE 문을 지정합니다.Specifies a REVOKE statement that revokes permissions on any securable except the new schema.

deny_statementdeny_statement
새 스키마를 제외한 모든 보안 개체에 대한 사용 권한을 거부하는 DENY 문을 지정합니다.Specifies a DENY statement that denies permissions on any securable except the new schema.

주의Remarks

참고

CREATE SCHEMA AUTHORIZATION을 포함하지만 이름을 지정하지 않는 문은 이전 버전과의 호환성을 위해서만 허용됩니다.Statements that contain CREATE SCHEMA AUTHORIZATION but do not specify a name, are permitted for backward compatibility only. 이 문은 오류를 일으키지 않지만 스키마를 만들지는 않습니다.The statement does not cause an error, but does not create a schema.

CREATE SCHEMA는 스키마와 이에 포함된 테이블 및 뷰를 만들 수 있으며 단일 문에서 모든 보안 개체에 대한 GRANT, REVOKE 또는 DENY 권한을 만들 수 있습니다.CREATE SCHEMA can create a schema, the tables and views it contains, and GRANT, REVOKE, or DENY permissions on any securable in a single statement. 이 문은 별도의 일괄 처리로 실행해야 합니다.This statement must be executed as a separate batch. CREATE SCHEMA 문으로 만드는 개체는 생성되는 스키마 내부에 생성됩니다.Objects created by the CREATE SCHEMA statement are created inside the schema that is being created.

CREATE SCHEMA 트랜잭션은 원자성을 갖습니다.CREATE SCHEMA transactions are atomic. CREATE SCHEMA 문을 실행하는 동안 오류가 발생하는 경우 지정한 보안 개체는 생성되지 않으며 사용 권한은 부여되지 않습니다.If any error occurs during the execution of a CREATE SCHEMA statement, none of the specified securables are created and no permissions are granted.

CREATE SCHEMA로 만든 보안 개체는 다른 뷰를 참조하는 뷰를 제외하면 순서에 관계없이 나열할 수 있습니다.Securables to be created by CREATE SCHEMA can be listed in any order, except for views that reference other views. 다른 뷰를 참조하는 뷰의 경우에는 참조하는 뷰보다 참조되는 뷰를 먼저 만들어야 합니다.In that case, the referenced view must be created before the view that references it.

따라서 GRANT 문은 개체를 만들기 전에 개체에 대한 사용 권한을 부여할 수 있으며 CREATE VIEW 문은 뷰가 참조하는 테이블을 만드는 CREATE TABLE 문에 앞서 표시될 수 있습니다.Therefore, a GRANT statement can grant permission on an object before the object itself is created, or a CREATE VIEW statement can appear before the CREATE TABLE statements that create the tables referenced by the view. 또한 CREATE TABLE 문은 CREATE SCHEMA문에 나중에 정의된 테이블에 대한 외래 키를 선언할 수 있습니다.Also, CREATE TABLE statements can declare foreign keys to tables that are defined later in the CREATE SCHEMA statement.

참고

CREATE SCHEMA 문 내에서 DENY 및 REVOKE를 사용할 수 있습니다.DENY and REVOKE are supported inside CREATE SCHEMA statements. DENY 및 REVOKE 절은 CREATE SCHEMA 문에 표시되는 순서대로 실행됩니다.DENY and REVOKE clauses will be executed in the order in which they appear in the CREATE SCHEMA statement.

CREATE SCHEMA를 실행하는 보안 주체는 다른 데이터베이스 보안 주체를 생성될 스키마의 소유자로 지정할 수 있습니다.The principal that executes CREATE SCHEMA can specify another database principal as the owner of the schema being created. 이렇게 하려면 이 항목의 뒷부분에 나오는 "사용 권한" 섹션에서 설명하는 추가 사용 권한이 필요합니다.This requires additional permissions, as described in the "Permissions" section later in this topic.

새 스키마는 데이터베이스 수준 보안 주체인 데이터베이스 사용자, 데이터베이스 역할 또는 응용 프로그램 역할 중 하나가 소유합니다.The new schema is owned by one of the following database-level principals: database user, database role, or application role. 스키마 내에서 만든 개체는 스키마 소유자가 소유하며 sys.objectsprincipal_id가 NULL입니다.Objects created within a schema are owned by the owner of the schema, and have a NULL principal_id in sys.objects. 스키마 포함 개체의 소유권을 모든 데이터베이스 수준 보안 주체에게 이전할 수 있지만 스키마 소유자는 항상 스키마 내의 개체에 대한 CONTROL 권한을 갖고 있어야 합니다.Ownership of schema-contained objects can be transferred to any database-level principal, but the schema owner always retains CONTROL permission on objects within the schema.

주의

SQL Server 2005부터 스키마 동작이 변경되었습니다.Beginning with SQL Server 2005, the behavior of schemas changed. 이에 따라 스키마가 데이터베이스 사용자와 같다고 가정하는 코드에서 올바른 결과가 반환되지 않을 수 있습니다.As a result, code that assumes that schemas are equivalent to database users may no longer return correct results. 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 문이 사용된 적이 있는 데이터베이스에서는 사용할 수 없습니다.Old catalog views, including sysobjects, should not be used in a database in which any of the following DDL statements have ever been used: 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. 이러한 데이터베이스에서는 새 카탈로그 뷰를 대신 사용해야 합니다.In such databases you must instead use the new catalog views. 새 카탈로그 뷰에서는 SQL Server 2005에 도입된 보안 주체와 스키마의 분리를 고려하고 있습니다.The new catalog views take into account the separation of principals and schemas that was introduced in SQL Server 2005. 카탈로그 뷰에 대한 자세한 내용은 카탈로그 뷰(Transact-SQL)를 참조하세요.For more information about catalog views, see Catalog Views (Transact-SQL).

암시적 스키마 및 사용자 만들기Implicit Schema and User Creation

일부 경우에 사용자는 데이터베이스 사용자 계정(데이터베이스의 데이터베이스 보안 주체)이 없더라도 데이터베이스를 사용할 수 있습니다.In some cases a user can use a database without having a database user account (a database principal in the database). 이런 경우 다음과 같은 상황이 발생할 수 있습니다.This can happen in the following situations:

  • 로그인은 제어 서버 권한.A login has CONTROL SERVER privileges.

  • Windows 사용자는 개별 데이터베이스 사용자 계정(데이터베이스의 데이터베이스 보안 주체)을 갖지 않지만 데이터베이스 사용자 계정(Windows 그룹용 데이터베이스 보안 주체)을 갖는 Windows 그룹의 구성원으로 데이터베이스에 액세스합니다.A Windows user does not have an individual database user account (a database principal in the database), but accesses a database as a member of a Windows group which has a database user account (a database principal for the Windows group).

    데이터베이스 사용자 계정이 없는 사용자는 기존 스키마를 지정하지 않고 개체를 만들 경우 해당 사용자에 대한 데이터베이스 보안 주체 및 기본 스키마가 데이터베이스에 자동으로 생성됩니다.When a user without a database user account creates an object without specifying an existing schema, a database principal and default schema will be automatically created in the database for that user. 생성된 데이터베이스 보안 주체 및 스키마는 SQL ServerSQL Server에 연결할 때 사용자가 사용한 이름과 동일한 이름( SQL ServerSQL Server 인증 로그인 이름 또는 Windows 사용자 이름)을 사용합니다.The created database principal and schema will have the same name as the name that user used when connecting to SQL ServerSQL Server (the SQL ServerSQL Server authentication login name or the Windows user name).

    이 동작은 Windows 그룹에 속한 사용자가 개체를 만들어 소유할 수 있도록 허용하므로 필요합니다.This behavior is necessary to allow users that are based on Windows groups to create and own objects. 그러나 스키마 및 사용자가 의도하지 않게 생성될 수 있습니다.However it can result in the unintentional creation of schemas and users. 의도하지 않은 사용자 및 스키마 생성을 방지하려면 가능한 경우 데이터베이스 보안 주체를 명시적으로 만들어 기본 스키마를 할당하세요.To avoid implicitly creating users and schemas, whenever possible explicitly create database principals and assign a default schema. 또는 데이터베이스에서 개체를 만들 때 두, 세 부분으로 구성된 개체 이름을 사용하여 기존 스키마를 명시적으로 지정합니다.Or explicitly state an existing schema when creating objects in a database, using two or three-part object names.

참고

Azure Active Directory 사용자의 암시적 생성 가능 하지 않기 SQL 데이터베이스SQL Database합니다.The implicit creation of an Azure Active Directory user is not possible on SQL 데이터베이스SQL Database. 외부 공급자에서 Azure AD 사용자를 만들기는 AAD에서 사용자 상태를 확인 해야 하기 때문에 2760 오류로 실패는 사용자를 만드는: 지정한 스키마 이름 "<user_name@domain>" 없거나 권한이 없습니다 사용할 수 있는 권한입니다.Since creating an Azure AD user from external provider must check the users status in the AAD, creating the user will fail with error 2760: The specified schema name "<user_name@domain>" either does not exist or you do not have permission to use it. 및 오류 2759: CREATE SCHEMA가 이전 오류로 인해 실패 했습니다.And then error 2759: CREATE SCHEMA failed due to previous errors. 이러한 오류를 해결 하려면 Azure AD 사용자 외부 공급자에서 먼저 만든 다음 개체를 만드는 문을 다시 실행 하십시오.To work around these errors, create the Azure AD user from external provider first and then rerun the statement creating the object.

사용 중단 고지 사항Deprecation Notice

스키마 이름을 지정하지 않는 CREATE SCHEMA 문은 이전 버전과의 호환성을 위해 현재 지원됩니다.CREATE SCHEMA statements that do not specify a schema name are currently supported for backward compatibility. 이 문은 데이터베이스 내부에 실제로 스키마를 만들지는 않지만 테이블과 뷰를 만들고 사용 권한을 부여합니다.Such statements do not actually create a schema inside the database, but they do create tables and views, and grant permissions. 스키마가 생성되지 않기 때문에 보안 주체에게는 이러한 이전 형식의 CREATE SCHEMA를 실행하는 데 CREATE SCHEMA 권한이 필요하지 않습니다.Principals do not need CREATE SCHEMA permission to execute this earlier form of CREATE SCHEMA, because no schema is being created. SQL ServerSQL Server의 다음번 릴리스에서는 이 기능이 제거될 예정입니다.This functionality will be removed from a future release of SQL ServerSQL Server.

PermissionsPermissions

데이터베이스에 대한 CREATE SCHEMA 권한이 필요합니다.Requires CREATE SCHEMA permission on the database.

CREATE SCHEMA 문 내에서 지정한 개체를 만들려면 사용자에게 해당 CREATE 권한이 있어야 합니다.To create an object specified within the CREATE SCHEMA statement, the user must have the corresponding CREATE permission.

다른 사용자를 생성되는 스키마의 소유자로 지정하려면 호출자에게 해당 사용자에 대한 IMPERSONATE 권한이 있어야 합니다.To specify another user as the owner of the schema being created, the caller must have IMPERSONATE permission on that user. 데이터베이스 역할을 소유자로 지정하는 경우 호출자에게 해당 역할의 멤버 자격이나 해당 역할에 대한 ALTER 권한이 있어야 합니다.If a database role is specified as the owner, the caller must have one of the following: membership in the role or ALTER permission on the role.

참고

이전 버전과 호환되는 구문을 사용하면 스키마가 생성되지 않기 때문에 CREATE SCHEMA 권한이 확인되지 않습니다.For the backward-compatible syntax, no permissions to CREATE SCHEMA are checked because no schema is being created.

Examples

1.A. 스키마 만들기 및 사용 권한 부여Creating a schema and granting permissions

다음 예에서는 Sprockets가 소유하고 Annik 테이블을 포함하는 NineProngs 스키마를 만듭니다.The following example creates schema Sprockets owned by Annik that contains table NineProngs. 이 문에서는 SELECT에게 Mandar 권한을 부여하고 SELECT에게는 Prasanna 권한을 거부합니다.The statement grants SELECT to Mandar and denies SELECT to Prasanna. SprocketsNineProngs는 단일 문으로 생성됩니다.Note that Sprockets and NineProngs are created in a single statement.

USE AdventureWorks2012;  
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   

예: Azure SQL 데이터 웨어하우스Azure SQL Data Warehouse병렬 데이터 웨어하우스Parallel Data WarehouseExamples: Azure SQL 데이터 웨어하우스Azure SQL Data Warehouse and 병렬 데이터 웨어하우스Parallel Data Warehouse

2.B. 스키마에서 스키마 및 테이블 만들기Creating a schema and a table in the schema

다음 예제에서는 스키마 Sales 다음 테이블을 만듭니다 Sales.Region 해당 스키마에 있습니다.The following example creates schema Sales and then creates a table Sales.Region in that schema.

CREATE SCHEMA Sales;  
GO;  

CREATE TABLE Sales.Region   
(Region_id int NOT NULL,  
Region_Name char(5) NOT NULL)  
WITH (DISTRIBUTION = REPLICATE);  
GO  

3.C. 스키마의 소유자를 설정합니다.Setting the owner of a schema

다음 예제에서는 스키마 Production 소유한 Mary합니다.The following example creates a schema Production owned by Mary.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];  
GO  

관련 항목:See Also

스키마 ( 변경 Transact SQL ) ALTER SCHEMA (Transact-SQL)
DROP 스키마 ( Transact SQL ) DROP SCHEMA (Transact-SQL)
GRANT(Transact-SQL) GRANT (Transact-SQL)
DENY(Transact-SQL) DENY (Transact-SQL)
REVOKE(Transact-SQL) REVOKE (Transact-SQL)
CREATE VIEW(Transact-SQL) CREATE VIEW (Transact-SQL)
EVENTDATA(Transact-SQL) EVENTDATA (Transact-SQL)
sys.schemas ( Transact SQL ) sys.schemas (Transact-SQL)
데이터베이스 스키마 만들기Create a Database Schema