Membuat dan mengelola skema bernama

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:

Membuat skema bernama

Perintah CREATE SCHEMA (GoogleSQL dan PostgreSQL) digunakan untuk membuat skema bernama.

  1. Di konsol Google Cloud , buka halaman Spanner.

    Buka Spanner

  2. Pilih instance dari daftar.

  3. Pilih database.

  4. Di menu navigasi, klik Spanner Studio.

  5. Buka tab baru dengan mengklik New SQL editor tab atau New tab.

  6. Di tab Editor, masukkan DDL Anda.

    GoogleSQL

    Jalankan pernyataan CREATE SCHEMA untuk membuat skema bernama, misalnya:

    CREATE SCHEMA sch1;
    

    Tambahkan objek database dalam skema bernama, 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 harus 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 bernama, 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.

  7. Lihat skema bernama dan objek terkait di panel Explorer.

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. Hak istimewa USAGE diberikan, secara default, ke skema default. Namun, Anda dapat mencabut hak istimewa USAGE untuk skema default. Berhati-hatilah saat mencabut akses karena pengguna dan peran yang aksesnya dicabut akan kehilangan semua akses ke objek dalam skema default.
  • Pernyataan ALL memberikan hak istimewa secara massal pada SEMUA objek dari suatu jenis dalam skema.
  • Kata kunci DEFAULT merujuk 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. Misalnya, pernyataan berikut memberikan izin untuk membaca dari tabel:

  • GRANT SELECT ON TABLE TABLE_NAME IN SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME (GoogleSQL dan PostgreSQL) memberi izin peran untuk membaca dari tabel tertentu dalam skema. Atau, Anda dapat memberikan izin peran untuk membaca dari semua tabel dalam skema menggunakan kata kunci ALL. Contoh, GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME. Pernyataan ALL sebelumnya hanya berlaku untuk tabel yang ada pada saat mengeksekusi pernyataan.
  • GRANT USAGE ON SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME (GoogleSQL dan PostgreSQL) memberikan izin peran untuk mengakses objek yang ada dalam skema jika izin objek yang ada juga terpenuhi. Misalnya, untuk tabel dalam skema, Anda memerlukan 'USAGE' pada skema, dan 'SELECT' pada tabel untuk membaca dari tabel.
  1. Di konsol Google Cloud , buka halaman Spanner.

    Buka Spanner

  2. Pilih instance dari daftar.

  3. Pilih database.

  4. Di menu navigasi, klik Spanner Studio.

  5. Buka tab baru dengan mengklik New SQL editor tab atau New tab.

  6. Di tab Editor, masukkan DDL Anda.

    GoogleSQL

    Buat peran khusus untuk skema bernama. Dalam contoh berikut, kita menggunakan role1 dan role2.

    CREATE ROLE role1
    CREATE ROLE role2
    

    Beri peran ke tabel yang menggunakan skema bernama menggunakan GRANT ALL. Dalam contoh berikut, kami menggunakan sch1 untuk skema bernama dan role1 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, kita memberikan izin penggunaan sch1 kepada role1 dan role2.

    GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2
    

    PostgreSQL

    Buat peran khusus untuk skema bernama. Dalam contoh berikut, kita menggunakan role1 dan role2.

    CREATE ROLE role1
    CREATE ROLE role2
    

    Beri peran ke tabel yang menggunakan skema bernama menggunakan GRANT ALL. Dalam contoh berikut, kami menggunakan sch1 untuk skema bernama dan role1 untuk peran.

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1
    

    Berikan penggunaan pada skema untuk peran yang Anda buat. Dalam contoh berikut, kita memberikan izin penggunaan sch1 kepada role1 dan role2.

    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.

  1. Di konsol Google Cloud , buka halaman Spanner.

    Buka Spanner

  2. Pilih instance dari daftar.

  3. Pilih database.

  4. Di menu navigasi, klik Spanner Studio.

  5. Buka tab baru dengan mengklik New SQL editor tab atau New tab.

  6. Di tab Editor, masukkan DDL Anda.

    GoogleSQL

    Dalam contoh berikut, kita memberikan akses ke semua tabel kepada role1.

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1
    

    PostgreSQL

    Dalam contoh berikut, kita memberikan akses ke semua tabel kepada role1.

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
    

Mencabut kontrol akses terperinci ke skema default

Anda dapat mencabut izin kontrol akses terperinci default pada skema default menggunakan perintah REVOKE USAGE.

  1. Di konsol Google Cloud , buka halaman Spanner.

    Buka Spanner

  2. Pilih instance dari daftar.

  3. Pilih database.

  4. Di menu navigasi, klik Spanner Studio.

  5. Buka tab baru dengan mengklik New SQL editor tab atau New tab.

  6. Di tab Editor, masukkan DDL Anda.

    GoogleSQL

    REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE public
    

    PostgreSQL

    REVOKE USAGE ON SCHEMA public FROM public
    
  7. Setelah perintah sebelumnya dijalankan, kita harus memberikan izin secara eksplisit kepada peran yang perlu mengakses skema default. Pada contoh berikut, kita memberikan izin ke role1.

    GoogleSQL

    Dalam contoh berikut, kita memberikan akses ke skema default kepada role1.

    GRANT USAGE ON SCHEMA default to ROLE role1
    

    PostgreSQL

    Dalam contoh berikut, kita memberikan akses ke skema default kepada role1.

    GRANT USAGE ON SCHEMA public To role1
    

Melihat skema bernama

  1. Pilih instance dari daftar.
  2. Pilih database.
  3. Di menu navigasi, klik Spanner Studio.
  4. Di panel Explorer, luaskan menu drop-down Schemas.

    Explorer dengan daftar Skema yang diperluas

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 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.

  1. Di konsol Google Cloud , buka halaman Spanner.

    Buka Spanner

  2. Pilih instance dari daftar.

  3. Pilih database.

  4. Di menu navigasi, klik Spanner Studio.

  5. Buka tab baru dengan mengklik New SQL editor tab atau New tab.

  6. Di tab Editor, masukkan DDL Anda.

    GoogleSQL

    Dalam contoh berikut, kita menghilangkan sch1.

    DROP SCHEMA IF EXISTS sch1;
    

    PostgreSQL

    Dalam contoh berikut, kita menghilangkan sch1.

    DROP SCHEMA IF EXISTS sch1;
    

Langkah berikutnya