MEMBUAT SKEMA (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

Membuat skema dalam database saat ini. Transaksi CREATE SCHEMA juga dapat membuat tabel dan tampilan dalam skema baru, dan mengatur izin GRANT, DENY, atau REVOKE pada objek tersebut.

Konvensi sintaks transact-SQL

Sintaksis

-- 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 Synapse Analytics and Parallel Data Warehouse  
  
CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

schema_name
Adalah nama tempat skema diidentifikasi dalam database.

owner_name OTORISASI
Menentukan nama prinsipal tingkat database yang akan memiliki skema. Prinsipal ini mungkin memiliki skema lain, dan mungkin tidak menggunakan skema saat ini sebagai skema defaultnya.

table_definition
Menentukan pernyataan CREATE TABLE yang membuat tabel dalam skema. Prinsipal yang menjalankan pernyataan ini harus memiliki izin CREATE TABLE pada database saat ini.

view_definition
Menentukan pernyataan CREATE VIEW yang membuat tampilan dalam skema. Prinsipal yang menjalankan pernyataan ini harus memiliki izin CREATE VIEW pada database saat ini.

grant_statement
Menentukan pernyataan GRANT yang memberikan izin pada setiap yang dapat diamankan kecuali skema baru.

revoke_statement
Menentukan pernyataan REVOKE yang mencabut izin pada setiap yang dapat diamankan kecuali skema baru.

deny_statement
Menentukan pernyataan TOLAK yang menolak izin pada skema yang dapat diamankan kecuali skema baru.

Keterangan

Catatan

Pernyataan yang berisi CREATE SCHEMA AUTHORIZATION tetapi tidak menentukan nama, hanya diizinkan untuk kompatibilitas mundur. Pernyataan ini tidak menyebabkan kesalahan, tetapi tidak membuat skema.

CREATE SCHEMA dapat membuat skema, tabel dan tampilan yang dikandungnya, dan izin GRANT, REVOKE, atau DENY pada setiap yang dapat diamankan dalam satu pernyataan. Pernyataan ini harus dijalankan sebagai batch terpisah. Objek yang dibuat oleh pernyataan CREATE SCHEMA dibuat di dalam skema yang sedang dibuat.

TRANSAKSI CREATE SCHEMA bersifat atomik. Jika terjadi kesalahan selama eksekusi pernyataan CREATE SCHEMA, tidak ada yang dapat diamankan yang ditentukan yang dibuat dan tidak ada izin yang diberikan.

Securables yang akan dibuat oleh CREATE SCHEMA dapat dicantumkan dalam urutan apa pun, kecuali untuk tampilan yang mereferensikan tampilan lain. Dalam hal ini, tampilan yang direferensikan harus dibuat sebelum tampilan yang mereferensikannya.

Oleh karena itu, pernyataan GRANT dapat memberikan izin pada objek sebelum objek itu sendiri dibuat, atau pernyataan CREATE VIEW dapat muncul sebelum pernyataan CREATE TABLE yang membuat tabel yang direferensikan oleh tampilan. Selain itu, pernyataan CREATE TABLE dapat mendeklarasikan kunci asing ke tabel yang ditentukan nanti dalam pernyataan CREATE SCHEMA.

Catatan

DENY dan REVOKE didukung di dalam pernyataan CREATE SCHEMA. Klausa DENY dan REVOKE akan dijalankan dalam urutan muncul dalam pernyataan CREATE SCHEMA.

Prinsipal yang menjalankan CREATE SCHEMA dapat menentukan prinsipal database lain sebagai pemilik skema yang sedang dibuat. Ini memerlukan izin tambahan, seperti yang dijelaskan di bagian "Izin" nanti dalam topik ini.

Skema baru dimiliki oleh salah satu prinsipal tingkat database berikut: pengguna database, peran database, atau peran aplikasi. Objek yang dibuat dalam skema dimiliki oleh pemilik skema, dan memiliki principal_id NULL di sys.objects. Kepemilikan objek yang berisi skema dapat ditransfer ke prinsipal tingkat database apa pun, tetapi pemilik skema selalu mempertahankan izin CONTROL pada objek dalam skema.

Perhatian

Dimulai dengan SQL Server 2005, perilaku skema berubah. Akibatnya, kode yang mengasumsikan bahwa skema setara dengan pengguna database mungkin tidak lagi mengembalikan hasil yang benar. Tampilan katalog lama, termasuk sysobjects, tidak boleh digunakan dalam database di mana salah satu pernyataan DDL berikut pernah digunakan: 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. Dalam database tersebut, Anda harus menggunakan tampilan katalog baru. Tampilan katalog baru memperhitungkan pemisahan prinsipal dan skema yang diperkenalkan di SQL Server 2005. Untuk informasi selengkapnya tentang tampilan katalog, lihat Tampilan Katalog (Transact-SQL).

Skema Implisit dan Pembuatan Pengguna

Catatan

ID Microsoft Entra sebelumnya dikenal sebagai Azure Active Directory (Azure AD).

Dalam beberapa kasus, pengguna dapat menggunakan database tanpa memiliki akun pengguna database (prinsipal database dalam database). Hal ini dapat terjadi dalam situasi berikut:

  • Login memiliki hak istimewa SERVER KONTROL.

  • Pengguna Windows tidak memiliki akun pengguna database individual (prinsip database dalam database), tetapi mengakses database sebagai anggota grup Windows yang memiliki akun pengguna database (prinsip database untuk grup Windows).

  • Pengguna Microsoft Entra tidak memiliki akun pengguna database individual (prinsipal database dalam database), tetapi mengakses database sebagai anggota grup Microsoft Entra yang memiliki akun pengguna database (prinsip database untuk grup Microsoft Entra).

Saat pengguna tanpa akun pengguna database membuat objek tanpa menentukan skema yang ada, prinsip database dan skema default akan dibuat secara otomatis dalam database untuk pengguna tersebut. Prinsipal dan skema database yang dibuat akan memiliki nama yang sama dengan nama yang digunakan pengguna saat menyambungkan ke SQL Server (nama login autentikasi SQL Server atau nama pengguna Windows).

Perilaku ini diperlukan untuk memungkinkan pengguna yang didasarkan pada grup Windows untuk membuat dan memiliki objek. Namun dapat mengakibatkan pembuatan skema dan pengguna yang tidak disengaja. Untuk menghindari pembuatan pengguna dan skema secara implisit, jika memungkinkan secara eksplisit membuat prinsipal database dan menetapkan skema default. Atau secara eksplisit menyatakan skema yang ada saat membuat objek dalam database, menggunakan nama objek dua atau tiga bagian.

Catatan

Pembuatan implisit pengguna Microsoft Entra tidak dimungkinkan di SQL Database. Karena membuat pengguna Microsoft Entra dari penyedia eksternal harus memeriksa status pengguna di ID Microsoft Entra, membuat pengguna akan gagal dengan kesalahan 2760: Nama skema yang ditentukan "<user_name@domain>" tidak ada atau Anda tidak memiliki izin untuk menggunakannya. Dan kemudian kesalahan 2759: CREATE SCHEMA gagal karena kesalahan sebelumnya. Upaya untuk membuat atau mengubah skema akan mengakibatkan kesalahan 15151: Tidak dapat menemukan pengguna '', karena tidak ada atau Anda tidak memiliki izin., juga diikuti oleh kesalahan 2759. Untuk mengatasi kesalahan ini, buat pengguna Microsoft Entra dari penyedia eksternal, atau ubah grup Microsoft Entra untuk menetapkan skema default. Kemudian jalankan ulang pernyataan yang membuat objek.

Di titik akhir analitik SQL dan Gudang di Microsoft Fabric, nama skema tidak dapat berisi / atau \ atau diakhir .dengan .

Pemberitahuan Penghentian

Pernyataan CREATE SCHEMA yang tidak menentukan nama skema saat ini didukung untuk kompatibilitas mundur. Pernyataan seperti itu sebenarnya tidak membuat skema di dalam database, tetapi mereka membuat tabel dan tampilan, dan memberikan izin. Prinsipal tidak memerlukan izin CREATE SCHEMA untuk menjalankan bentuk CREATE SCHEMA sebelumnya ini, karena tidak ada skema yang dibuat. Fungsionalitas ini akan dihapus dari rilis SQL Server di masa mendatang.

Izin

Memerlukan izin CREATE SCHEMA pada database.

Untuk membuat objek yang ditentukan dalam pernyataan CREATE SCHEMA, pengguna harus memiliki izin CREATE yang sesuai.

Untuk menentukan pengguna lain sebagai pemilik skema yang sedang dibuat, pemanggil harus memiliki izin IMPERSONATE pada pengguna tersebut. Jika peran database ditentukan sebagai pemilik, pemanggil harus memiliki salah satu hal berikut: keanggotaan dalam peran atau izin UBAH pada peran tersebut.

Catatan

Untuk sintaksis yang kompatibel dengan mundur, tidak ada izin untuk MEMBUAT SKEMA yang diperiksa karena tidak ada skema yang dibuat.

Contoh

J. Membuat skema dan memberikan izin

Contoh berikut membuat skema Sprockets yang dimiliki oleh Annik yang berisi tabel NineProngs. Pernyataan tersebut memberikan SELECT kepada Mandar dan menyangkal SELECT kepada Prasanna. Perhatikan bahwa Sprockets dan NineProngs dibuat dalam satu pernyataan.

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   

Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)

B. Membuat skema dan tabel dalam skema

Contoh berikut membuat skema Sales lalu membuat tabel Sales.Region dalam skema tersebut.

CREATE SCHEMA Sales;  
GO
  
CREATE TABLE Sales.Region   
(Region_id INT NOT NULL,  
Region_Name CHAR(5) NOT NULL)  
WITH (DISTRIBUTION = REPLICATE);  
GO  

C. Mengatur pemilik skema

Contoh berikut membuat skema Production yang dimiliki oleh Mary.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];  
GO  

Lihat Juga

ALTER SCHEMA (Transact-SQL)
DROP SCHEMA (Transact-SQL)
GRANT (T-SQL)
TOLAK (Transact-SQL)
MENCABUT (Transact-SQL)
CREATE VIEW (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.schemas (Transact-SQL)
Membuat Skema Database