[! INCLUDE [sql-asdb-asdbmi-asa-pdw-fabricse-fabricdw-fabricsqldb(.. /.. /includes/applies-to-version/sql-asdb-asdbmi-asa-pdw-fabricse-fabricdw-fabricsqldb.md)]
현재 데이터베이스에 스키마를 만듭니다. 트랜잭션은 CREATE SCHEMA 새 스키마 내에서 테이블 및 뷰를 만들고 해당 개체에 대한 사용 권한 또는 GRANT 권한을 설정할 DENYREVOKE수도 있습니다.
구문
Microsoft Fabric의 SQL Server, Azure SQL Database 및 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
}
Azure Synapse Analytics 및 병렬 데이터 웨어하우스에 대한 구문입니다.
CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]
인수
schema_name
데이터베이스 내의 스키마 이름을 지정합니다.
권한 부여 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는 스키마, 스키마에 포함된 테이블 및 GRANTREVOKE뷰, 또는 DENY 단일 문의 보안 개체에 대한 사용 권한을 만들 수 있습니다. 이 문을 별도의 일괄 처리로 실행해야 합니다. 문에서 CREATE SCHEMA 만든 개체는 사용자가 만든 스키마 내에 만들어집니다.
CREATE SCHEMA 트랜잭션은 원자성입니다. 문을 실행하는 CREATE SCHEMA 동안 오류가 발생하면 지정된 보안 개체가 만들어지지 않으며 사용 권한이 부여되지 않습니다.
다른 보기를 참조하는 뷰를 제외하고 모든 순서로 CREATE SCHEMA 만들 보안 개체를 나열할 수 있습니다. 다른 뷰를 참조하는 뷰의 경우에는 참조하는 뷰보다 참조되는 뷰를 먼저 만들어야 합니다.
따라서 GRANT 개체 자체를 만들기 전에 문에서 개체에 대한 사용 권한을 부여하거나 CREATE VIEW 뷰에서 참조하는 테이블을 만드는 문 앞에 CREATE TABLE 문을 표시할 수 있습니다.
CREATE TABLE 또한 문은 문 뒷부분에 정의된 테이블에 외장 키를 선언할 CREATE SCHEMA 수 있습니다.
참고
DENY 문 REVOKE 내에서 CREATE SCHEMA 지원됩니다.
DENY 및 REVOKE 절은 문에 표시되는 CREATE SCHEMA 순서대로 실행됩니다.
실행되는 CREATE SCHEMA 보안 주체는 생성되는 스키마의 소유자로 다른 데이터베이스 보안 주체를 지정할 수 있습니다. 이 작업을 수행하려면 이 문서의 뒷부분에 있는 사용 권한 섹션에 설명된 대로 추가 권한이 필요합니다.
새 스키마는 데이터베이스 수준 보안 주체인 데이터베이스 사용자, 데이터베이스 역할 또는 애플리케이션 역할 중 하나가 소유합니다. 스키마 내에서 만든 개체는 스키마 소유자가 소유하고 null principal_id 을 갖습니다 sys.objects. 스키마가 포함된 개체의 소유권을 데이터베이스 수준 보안 주체로 이전할 수 있지만 스키마 소유자는 항상 스키마 내의 개체에 대한 권한을 유지합니다 CONTROL .
참고
스키마는 데이터베이스 사용자와 동일하지 않습니다. 시스템 카탈로그 뷰를 사용하여 데이터베이스 사용자와 스키마 간의 차이점을 식별합니다.
암시적 스키마 및 사용자 만들기
참고
Microsoft Entra ID는 이전에 Azure Active Directory(Azure AD)로 알려졌습니다.
경우에 따라 사용자는 데이터베이스 사용자 계정(데이터베이스의 데이터베이스 보안 주체)이 없으면 데이터베이스를 사용할 수 있습니다. 이 조건은 다음과 같은 상황에서 발생할 수 있습니다.
로그인에는
CONTROL SERVER권한이 있습니다.Windows 사용자는 개별 데이터베이스 사용자 계정(데이터베이스의 데이터베이스 보안 주체)이 없지만 데이터베이스 사용자 계정(Windows 그룹의 데이터베이스 보안 주체)이 있는 Windows 그룹의 구성원으로 데이터베이스에 액세스합니다.
Microsoft Entra 사용자에게는 개별 데이터베이스 사용자 계정(데이터베이스의 데이터베이스 보안 주체)이 없지만 데이터베이스 사용자 계정(Microsoft Entra 그룹의 데이터베이스 보안 주체)이 있는 Microsoft Entra 그룹의 구성원으로 데이터베이스에 액세스합니다.
데이터베이스 사용자 계정이 없는 사용자가 기존 스키마를 지정하지 않고 개체를 만들면 해당 사용자에 대해 데이터베이스에 데이터베이스 보안 주체 및 기본 스키마가 자동으로 만들어집니다. 만든 데이터베이스 보안 주체 및 스키마의 이름은 SQL Server에 연결할 때 사용자가 사용한 이름(SQL Server 인증 로그인 이름 또는 Windows 사용자 이름)과 같습니다.
이 동작은 Windows 그룹에 속한 사용자가 개체를 만들어 소유할 수 있도록 허용하므로 필요합니다. 그러나 스키마와 사용자를 의도하지 않게 만들 수 있습니다. 의도하지 않은 사용자 및 스키마 생성을 방지하려면 가능한 경우 데이터베이스 보안 주체를 명시적으로 만들어 기본 스키마를 할당하세요. 또는 데이터베이스에서 개체를 만들 때 두, 세 부분으로 구성된 개체 이름을 사용하여 기존 스키마를 명시적으로 지정합니다.
SQL Database에서는 Microsoft Entra 사용자를 암시적으로 만들 수 없습니다. 외부 공급자에서 Microsoft Entra 사용자를 만들려면 Microsoft Entra ID에서 사용자의 상태를 확인해야 하므로 사용자 만들기는 오류 2760: The specified schema name "<user@domain>" either does not exist or you do not have permission to use it. 오류 2759와 함께 실패합니다. CREATE SCHEMA failed due to previous errors.
스키마를 만들거나 변경하려고 하면 오류 15151, Cannot find the user '', because it does not exist or you do not have permission.오류 2759가 발생합니다. 이러한 오류를 해결하려면 외부 공급자에서 Microsoft Entra 사용자를 만들거나 Microsoft Entra 그룹을 변경하여 기본 스키마를 할당합니다. 그런 다음 개체를 만드는 문을 다시 실행합니다.
Microsoft Fabric의 SQL 분석 엔드포인트 및 웨어하우스에서 스키마 이름은 을 포함 / 하거나 \ 종료 .할 수 없습니다.
사용 중단 알림
CREATE SCHEMA 스키마 이름을 지정하지 않는 문은 현재 이전 버전과의 호환성을 위해 지원됩니다. 이러한 문은 실제로 데이터베이스에 스키마를 만들지 않지만 테이블과 뷰를 만들고 권한을 부여합니다. 스키마가 만들어지지 않으므로 보안 주체는 이 이전 형식을 CREATE SCHEMA실행할 수 있는 권한이 필요하지 CREATE SCHEMA 않습니다. SQL Server의 다음번 릴리스에서는 이 기능이 제거될 예정입니다.
사용 권한
데이터베이스에 대한 CREATE SCHEMA 권한이 필요합니다.
문 내에 지정된 개체를 CREATE SCHEMA 만들려면 사용자에게 해당 CREATE 권한이 있어야 합니다.
다른 사용자를 만들 스키마의 소유자로 지정하려면 호출자에게 해당 사용자에 대한 권한이 있어야 합니다 IMPERSONATE . 데이터베이스 역할이 소유자로 지정된 경우 호출자에게 역할의 멤버 자격 또는 ALTER 역할에 대한 사용 권한 중 하나가 있어야 합니다.
이전 버전과 호환되는 구문의 경우 스키마가 CREATE SCHEMA 만들어지지 않으므로 확인할 권한이 없습니다.
패브릭 데이터 웨어하우스의 권한
Fabric Data Warehouse에서 권한 외에도 CREATE SCHEMA 사용자는 관리자, 멤버 또는 기여자 작업 영역 역할의 구성원이어야 합니다.
예제
A. 스키마 만들기 및 권한 부여
다음 예에서는 Sprockets가 소유하고 Annik 테이블을 포함하는 NineProngs 스키마를 만듭니다. 이 문에서는 SELECT에게 Mandar 권한을 부여하고 SELECT에게는 Prasanna 권한을 거부합니다.
Sprockets 단일 NineProngs 문으로 만들어집니다.
USE AdventureWorks2022;
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 Synapse Analytics 및 분석 플랫폼 시스템(PDW)
B. 스키마에 스키마 및 테이블 만들기
다음 예에서는 Sales 스키마를 만든 다음, 해당 스키마에 Sales.Region 테이블을 만듭니다.
CREATE SCHEMA Sales;
GO
CREATE TABLE Sales.Region
(
Region_id INT NOT NULL,
Region_Name CHAR (5) NOT NULL
)
WITH (DISTRIBUTION = REPLICATE);
GO
C. 스키마의 소유자 설정
다음 예제에서는 스키마를 Production 만들고 소유자로 설정합니다 Mary .
CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];
GO