BUAT SKEMA (SQL Transact)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics Analytics
Platform System (PDW)
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 ] [;]
Catatan
Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
nama_skema
Adalah nama tempat skema diidentifikasi dalam database.
owner_name OTORISASI
Menentukan nama prinsipal tingkat database yang akan memiliki skema. Prinsipal ini dapat 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 skema 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 setiap 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 pada SQL Server 2005. Untuk informasi selengkapnya tentang tampilan katalog, lihat Tampilan Katalog (Transact-SQL).
Skema Implisit dan Pembuatan Pengguna
Dalam beberapa kasus, pengguna dapat menggunakan database tanpa memiliki akun pengguna database (prinsipal database dalam database). Ini dapat terjadi dalam situasi berikut:
Login memiliki hak istimewa SERVER KONTROL .
Pengguna Windows tidak memiliki akun pengguna database individual (prinsipal database dalam database), tetapi mengakses database sebagai anggota grup Windows yang memiliki akun pengguna database (prinsipal database untuk grup Windows).
Saat pengguna tanpa akun pengguna database membuat objek tanpa menentukan skema yang ada, skema utama database dan 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 dua atau tiga bagian nama objek.
Catatan
Pembuatan implisit pengguna Azure Active Directory tidak dimungkinkan pada SQL Database. Karena membuat pengguna Azure AD dari penyedia eksternal harus memeriksa status pengguna di AAD, 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. Untuk mengatasi kesalahan ini, buat pengguna Azure AD dari penyedia eksternal terlebih dahulu lalu jalankan ulang pernyataan yang membuat objek.
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 sedang dibuat. Fungsionalitas ini akan dihapus dari rilis SQL Server 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 kompatibel mundur, tidak ada izin untuk MEMBUAT SKEMA yang diperiksa karena tidak ada skema yang dibuat.
Contoh
A. Membuat skema dan memberikan izin
Contoh berikut membuat skema Sprockets yang dimiliki oleh Annik yang berisi tabel NineProngs. Pernyataan ini memberikan SELECT dan Mandar menolak SELECT untuk Prasanna. Perhatikan bahwa Sprockets dan NineProngs dibuat dalam satu pernyataan.
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
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 (SQL Bertransaksi)
TOLAK (SQL bertransaksi)
MENCABUT (SQL Bertransaksi)
CREATE VIEW (SQL Bertransaksi)
EVENTDATA (SQL Bertransaksi)
sys.schemas (Transact-SQL)
Membuat Skema Database
