MEMBUAT SKEMA (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse 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.
Sintaks
-- 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 ] [;]
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