Bagikan melalui


MEMBUAT SKEMA (Transact-SQL)

[! SERTAKAN [sql-asdb-asdbmi-asa-pdw-fabricse-fabricdw-fabricsqldb(.. . /.. /includes/applys-to-version/sql-asdb-asdbmi-asa-pdw-fabricse-fabricdw-fabricsqldb.md)]

Membuat skema dalam database saat ini. Transaksi CREATE SCHEMA juga dapat membuat tabel dan tampilan dalam skema baru, dan mengatur GRANTizin , , DENYatau REVOKE pada objek tersebut.

Konvensi sintaks transact-SQL

Sintaks

Sintaks untuk SQL Server, Azure SQL Database, dan database SQL di Microsoft Fabric.

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
    }

Sintaks untuk Azure Synapse Analytics dan Gudang Data Paralel.

CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]

Argumen

schema_name

Menentukan nama skema 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

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

view_definition

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

grant_statement

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

revoke_statement

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

deny_statement

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

Keterangan

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 GRANT, REVOKE, atau DENY izin pada setiap yang dapat diamankan dalam satu pernyataan. Anda harus menjalankan pernyataan ini sebagai batch terpisah. Objek yang dibuat oleh CREATE SCHEMA pernyataan dibuat di dalam skema yang Anda buat.

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

Anda dapat mencantumkan jaminan yang akan dibuat oleh CREATE SCHEMA 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, GRANT pernyataan dapat memberikan izin pada objek sebelum objek itu sendiri dibuat, atau CREATE VIEW pernyataan dapat muncul sebelum CREATE TABLE pernyataan yang membuat tabel yang direferensikan oleh tampilan. Selain itu, CREATE TABLE pernyataan dapat mendeklarasikan kunci asing ke tabel yang ditentukan nanti dalam CREATE SCHEMA pernyataan.

Catatan

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

Prinsipal yang dijalankan CREATE SCHEMA dapat menentukan prinsipal database lain sebagai pemilik skema yang sedang dibuat. Tindakan ini memerlukan izin tambahan, seperti yang dijelaskan di bagian Izin nanti di artikel 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 null principal_id di sys.objects. Anda dapat mentransfer kepemilikan objek yang berisi skema ke prinsipal tingkat database apa pun, tetapi pemilik skema selalu mempertahankan CONTROL izin pada objek dalam skema.

Catatan

Skema tidak setara dengan pengguna database. Gunakan tampilan Katalog sistem untuk mengidentifikasi perbedaan antara pengguna database dan skema.

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). Kondisi ini dapat terjadi dalam situasi berikut:

  • Login memiliki CONTROL SERVER hak istimewa.

  • 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 dibuat dalam database secara otomatis untuk pengguna tersebut. Prinsipal dan skema database yang dibuat 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, hal ini 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.

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 gagal dengan kesalahan 2760: The specified schema name "<user@domain>" either does not exist or you do not have permission to use it. Lalu kesalahan 2759: CREATE SCHEMA failed due to previous errors.

Upaya untuk membuat atau mengubah skema mengakibatkan kesalahan 15151: Cannot find the user '', because it does not exist or you do not have permission., 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

CREATE SCHEMA pernyataan yang tidak menentukan nama skema saat ini didukung untuk kompatibilitas mundur. Pernyataan ini sebenarnya tidak membuat skema dalam database, tetapi membuat tabel dan tampilan, dan memberikan izin. Prinsipal tidak memerlukan CREATE SCHEMA izin untuk menjalankan bentuk sebelumnya dari CREATE SCHEMA, karena tidak ada skema yang sedang 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 CREATE SCHEMA pernyataan, pengguna harus memiliki izin yang CREATE sesuai.

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

Untuk sintaksis yang kompatibel dengan mundur, tidak ada izin untuk CREATE SCHEMA diperiksa karena tidak ada skema yang sedang dibuat.

Izin di Fabric Data Warehouse

Di Gudang Data Fabric, selain CREATE SCHEMA izin, pengguna harus menjadi anggota peran ruang kerja Admin, Anggota, atau Kontributor.

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. 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 Production skema, dan ditetapkan Mary sebagai pemilik.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];
GO