Halaman ini menjelaskan cara membuat, menggunakan, dan menghapus skema bernama, serta cara menerapkan kontrol akses terperinci ke objek dalam skema bernama. Untuk informasi ringkasan tentang skema bernama, lihat Skema bernama.
Sebelum memulai
Untuk melakukan prosedur di halaman ini, Anda memerlukan hal berikut:
- Peran Database Admin roles/spanner.databaseAdmin di akun pengguna Anda.
- Pahami cara kerja kontrol akses terperinci.
Membuat skema yang diberi nama
Perintah CREATE SCHEMA
(GoogleSQL
dan PostgreSQL)
digunakan untuk membuat skema bernama.
Di konsol Google Cloud, buka halaman Spanner.
Pilih instance dari daftar.
Pilih database.
Di menu navigasi, klik Spanner Studio.
Buka tab baru dengan mengklik
Tab editor SQL baru atau Tab baru.Di tab Editor, masukkan DDL Anda.
GoogleSQL
Jalankan pernyataan
CREATE SCHEMA
untuk membuat skema bernama, misalnya:CREATE SCHEMA sch1;
Tambahkan objek database dalam skema yang telah diberi nama, misalnya:
CREATE SEQUENCE sch1.sequence OPTIONS ( sequence_kind = 'bit_reversed_positive' ); CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX), ) PRIMARY KEY(SingerId); CREATE INDEX indexOnSingers ON Singers(FirstName); CREATE TABLE Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId), INTERLEAVE IN PARENT Singers ON DELETE CASCADE; CREATE TABLE Songs ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, TrackId INT64 NOT NULL, SongName STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId, TrackId), INTERLEAVE IN PARENT Albums ON DELETE CASCADE; CREATE TABLE sch1.Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX), ) PRIMARY KEY(SingerId); CREATE INDEX sch1.indexOnSingers ON sch1.Singers(FirstName); CREATE TABLE sch1.Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId), INTERLEAVE IN PARENT sch1.Singers ON DELETE CASCADE; CREATE TABLE sch1.Songs ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, TrackId INT64 NOT NULL, SongName STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId, TrackId), INTERLEAVE IN PARENT sch1.Albums ON DELETE CASCADE; CREATE VIEW sch1.SingerView SQL SECURITY INVOKER AS Select s.FirstName, s.LastName, s.SingerInfo FROM sch1.Singers AS s WHERE s.SingerId = 123456; CREATE VIEW SingerView SQL SECURITY INVOKER AS Select s.FirstName, s.LastName, s.SingerInfo FROM Singers AS s WHERE s.SingerId = 123456;
Spanner hanya memungkinkan Anda membuat indeks yang menggunakan skema yang sama dengan tabel yang menggunakan indeks. Kita perlu memastikan bahwa nama skema indeks dan tabel sama.
PostgreSQL
Jalankan pernyataan
CREATE SCHEMA
untuk membuat skema bernama, misalnya:CREATE SCHEMA sch1;
Tambahkan objek database dalam skema yang telah diberi nama, misalnya:
CREATE SEQUENCE sch1.sequence BIT_REVERSED_POSITIVE CREATE TABLE sch1.singers( singer_id bigint primary key, album_id bigint default(nextval('sch1.sequence'))) CREATE TABLE sch1.albums(k bigint default(nextval('sch1.sequence'))primary key, album_id bigint) CREATE VIEW sch1.singer_view SQL SECURITY INVOKER AS SELECT * FROM sch1.singers CREATE INDEX index_singers ON TABLE sch1.singers(album_id)
Spanner hanya mengizinkan pembuatan indeks dalam skema yang sama. Di Spanner, pernyataan PostgreSQL melakukannya secara default. Anda tidak perlu menggunakan nama yang sepenuhnya memenuhi syarat untuk membuat indeks pada skema bernama.
Lihat skema bernama dan objek terkait di panel Penjelajah.
Menambahkan kontrol akses yang sangat terperinci ke skema bernama
Pernyataan DDL berikut menambahkan kontrol akses yang sangat terperinci ke skema bernama:
- Hak istimewa
USAGE
memberikan hak istimewa ke objek skema. Secara default, hak istimewaUSAGE
diberikan ke skema default. Namun, Anda dapat membatalkan hak istimewaUSAGE
untuk skema default. Berhati-hatilah saat mencabut akses karena pengguna dan peran yang dicabut akan kehilangan semua akses ke objek dalam skema default. - Pernyataan
ALL
melakukan hak istimewa pemberian massal pada SEMUA objek dari suatu jenis dalam skema. - Kata kunci
DEFAULT
mengacu pada skema default dalam pernyataan DDL FGAC.
Untuk mengakses objek dalam skema bernama, Anda harus memiliki izin penggunaan pada skema bernama dan izin yang sesuai pada objek database yang menggunakan skema tersebut. Pernyataan berikut memberikan izin ini:
GRANT ALL
(GoogleSQL dan PostgreSQL) memberikan izin peran untuk mengakses semua objek dalam tabel yang dibuat dengan skema yang dinamai. Pernyataan ini hanya berlaku untuk objek yang ada pada waktu tersebut. Jika nanti Anda menambahkan lebih banyak objek ke tabel, Anda harus memberikan akses ke objek tersebut saat membuatnya.GRANT USAGE
(GoogleSQL dan PostgreSQL) memberikan izin peran untuk mengakses objek yang terdapat dalam skema. Hal ini memungkinkan penerima mencari objek dalam skema.
Di konsol Google Cloud, buka halaman Spanner.
Pilih instance dari daftar.
Pilih database.
Di menu navigasi, klik Spanner Studio.
Buka tab baru dengan mengklik
Tab editor SQL baru atau Tab baru.Di tab Editor, masukkan DDL Anda.
GoogleSQL
Buat peran khusus untuk skema yang diberi nama. Dalam contoh berikut, kita menggunakan
role1
danrole2
.CREATE ROLE role1 CREATE ROLE role2
Berikan peran ke tabel yang menggunakan skema bernama menggunakan
GRANT ALL
. Dalam contoh berikut, kita menggunakansch1
untuk skema bernama danrole1
untuk peran.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1
Berikan penggunaan pada skema untuk peran yang Anda buat. Dalam contoh berikut, kami memberikan penggunaan pada
sch1
kerole1
danrole2
.GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2
PostgreSQL
Buat peran khusus untuk skema yang diberi nama. Dalam contoh berikut, kita menggunakan
role1
danrole2
.CREATE ROLE role1 CREATE ROLE role2
Berikan peran ke tabel yang menggunakan skema bernama menggunakan
GRANT ALL
. Dalam contoh berikut, kita menggunakansch1
untuk skema bernama danrole1
untuk peran.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1
Berikan penggunaan pada skema untuk peran yang Anda buat. Dalam contoh berikut, kami memberikan penggunaan pada
sch1
kerole1
danrole2
.GRANT USAGE ON SCHEMA sch1 TO role1, role2
Menambahkan dan mencabut kontrol akses terperinci ke skema default
Jika Anda telah memberi nama skema, skema default akan disebut default
. Anda harus
menggunakan nama skema default
saat menambahkan atau mencabut kontrol akses terperinci.
Menambahkan kontrol akses yang sangat terperinci ke skema default
Secara default, semua pengguna dan peran memiliki izin USAGE
pada skema
default.
Di konsol Google Cloud, buka halaman Spanner.
Pilih instance dari daftar.
Pilih database.
Di menu navigasi, klik Spanner Studio.
Buka tab baru dengan mengklik
Tab editor SQL baru atau Tab baru.Di tab Editor, masukkan DDL Anda.
GoogleSQL
Dalam contoh berikut, kita memberikan akses ke semua tabel ke
role1
.GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1
PostgreSQL
Dalam contoh berikut, kita memberikan akses ke semua tabel ke
role1
.GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
Mencabut kontrol akses yang sangat terperinci ke skema default
Anda dapat mencabut izin kontrol akses terperinci default pada skema default menggunakan perintah REVOKE USAGE
.
Di konsol Google Cloud, buka halaman Spanner.
Pilih instance dari daftar.
Pilih database.
Di menu navigasi, klik Spanner Studio.
Buka tab baru dengan mengklik
Tab editor SQL baru atau Tab baru.Di tab Editor, masukkan DDL Anda.
GoogleSQL
REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE public
PostgreSQL
REVOKE USAGE ON SCHEMA public FROM public
Setelah perintah sebelumnya dijalankan, kita harus secara eksplisit memberikan izin ke peran yang perlu mengakses skema default. Pada contoh berikut, kami memberikan izin ke
role1
.GoogleSQL
Dalam contoh berikut, kami memberikan akses ke skema default ke
role1
.SCHEMA default to ROLE role1
PostgreSQL
Dalam contoh berikut, kami memberikan akses ke skema default ke
role1
.GRANT USAGE ON SCHEMA public To role1
Melihat skema bernama
- Pilih instance dari daftar.
- Pilih database.
- Di menu navigasi, klik Spanner Studio.
Di panel Explorer, luaskan daftar drop-down Skema.
Atau, Anda dapat menggunakan SQL untuk melihat semua skema dalam
tabel information_schema.schemata
.
Contoh berikut menunjukkan cara melihat skema nama dan pemiliknya:
SELECT schema_name, schema_owner
FROM information_schema.schemata
ORDER BY schema_owner
Pernyataan ini memberikan daftar skema dan pemilik, mirip dengan yang berikut ini:
public spanner_admin
products spanner_admin
analytics spanner_admin
logs spanner_admin
pg_catalog spanner_system
information_schema spanner_system
spanner_sys spanner_system
Menghapus skema bernama
Perintah DROP SCHEMA
(GoogleSQL
dan PostgreSQL)
digunakan untuk menghapus skema bernama.
Di konsol Google Cloud, buka halaman Spanner.
Pilih instance dari daftar.
Pilih database.
Di menu navigasi, klik Spanner Studio.
Buka tab baru dengan mengklik
Tab editor SQL baru atau Tab baru.Di tab Editor, masukkan DDL Anda.
GoogleSQL
Dalam contoh berikut, kita menghapus
sch1
.DROP SCHEMA IF EXISTS sch1;
PostgreSQL
Dalam contoh berikut, kita menghapus
sch1
.DROP SCHEMA IF EXISTS sch1;
Langkah selanjutnya
- Pelajari Praktik terbaik skema.
- Pelajari Tampilan.
- Pelajari Indeks sekunder.
- Pelajari Kunci asing.