全部产品
Search
文档中心

Hologres:Menggunakan model izin tingkat skema

更新时间:Feb 04, 2026

Topik ini menjelaskan cara menggunakan model izin tingkat skema (SLPM) dengan pernyataan SQL di Hologres.

Batasan

SLPM mengontrol izin secara ketat pada tingkat skema. Perhatikan batasan berikut saat memberikan dan menggunakan izin:

  • Jika Anda membuat view atau rule yang mereferensikan dua tabel atau lebih dari skema yang berbeda, the view or rule cannot be accessed because permissions are not shared between schemas. Sistem akan melaporkan error: ERROR: permission denied for table. Oleh karena itu, jangan membuat view atau rule lintas skema di database yang dikelola oleh SLPM. Untuk membuat view lintas skema, lihat Buat view lintas skema dalam mode SLPM (Beta).

  • Setelah Anda mengaktifkan SLPM, hanya izin tertentu yang diberikan. Untuk informasi selengkapnya tentang izin yang diberikan, lihat Berikan izin menggunakan model izin tingkat skema. Anda tidak dapat menggunakan fitur DDL pada tabel berikut dengan SLPM. Sebagai gantinya, gunakan pernyataan SLPM yang sesuai untuk melakukan operasi tersebut. Untuk informasi selengkapnya tentang fungsi-fungsi tersebut, lihat Fungsi model izin tingkat skema.

    Command

    Deskripsi

    SLPM statement

    alter table owner to xx

    Pemilik semua tabel adalah kelompok pengguna developer dari skema yang bersangkutan. Anda tidak dapat mengubah pemiliknya.

    Tidak perlu eksekusi manual.

    grant

    Setelah pengguna ditambahkan ke kelompok pengguna, pengguna tersebut otomatis mendapatkan izin dari kelompok tersebut. Anda tidak perlu menjalankan pernyataan grant.

    slpm_grant

    revoke

    Untuk mencabut izin dari pengguna, Anda harus menghapus pengguna tersebut dari kelompok pengguna yang sesuai. Anda tidak dapat menjalankan pernyataan revoke secara terpisah.

    slpm_revoke

    alter default privileges

    Dalam model izin standar, pemberian izin hanya berlaku untuk tabel saat ini dan masa lalu. Anda harus memberikan izin secara terpisah untuk tabel yang akan dibuat di masa depan. Dalam model simple, Anda tidak perlu mempertimbangkan kapan tabel dibuat. Pengguna memiliki izin yang diperlukan selama berada dalam kelompok pengguna yang tepat. Anda tidak perlu memberikan izin untuk tabel yang akan datang.

    Tidak perlu eksekusi manual.

    create / drop / alter / rename default user groups

    Setelah Anda mengaktifkan SLPM, kelompok pengguna default seperti admin, developer, writer, dan viewer akan dibuat. Pengguna, termasuk superuser, tidak dapat membuat, mengubah, atau menghapus kelompok pengguna default ini.

    Tidak berlaku.

    rename schema

    Untuk mengganti nama skema, Anda tidak dapat langsung menjalankan perintah alter rename schema di database. Anda harus memanggil perintah slpm_rename_schema.

    slpm_rename_schema

    drop database

    Untuk menghapus database, Anda harus menjalankan drop database lalu memanggil slpm_cleanup('<dbname>') untuk purge pengguna default.

    Jalankan drop database lalu panggil slpm_cleanup('<dbname>') untuk purge pengguna default.

  • Hanya Hologres V1.3.36 dan versi yang lebih baru yang mendukung pembuatan view lintas skema. Jika instans Anda lebih lama dari V1.3.36, lihat Error umum yang terjadi saat mempersiapkan peningkatan instans atau bergabunglah dengan grup DingTalk Hologres untuk memberikan masukan. Untuk informasi selengkapnya, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.

Berikan izin menggunakan model izin tingkat skema

Setelah menghubungkan instans Hologres ke alat pengembangan, Anda dapat menggunakan pernyataan SQL untuk memberikan izin yang relevan kepada pengguna pada skema yang sesuai di tingkat skema menggunakan mode dasar.

  1. Aktifkan pemanggilan fungsi.

    Sebelum mengaktifkan SLPM, jalankan perintah berikut untuk mengaktifkan pemanggilan fungsi. extension pada contoh berikut berada di tingkat database. Anda hanya perlu menjalankan perintah ini sekali untuk setiap database.

    create extension slpm;
  2. Aktifkan SLPM.

    SLPM dinonaktifkan secara default. Superuser harus menjalankan pernyataan berikut di database target untuk mengaktifkannya. Saat mengaktifkan SLPM, pastikan tidak ada pernyataan SQL yang sedang berjalan di database tersebut. Jika tidak, operasi tersebut mungkin gagal dan memengaruhi layanan Anda.

    call slpm_enable ();  // Aktifkan SLPM untuk database saat ini.
  3. Opsional:Alihkan dari model otorisasi PostgreSQL standar ke SLPM.

    Anda dapat memeriksa model izin sebagai berikut:

    1. Login ke Konsol Hologres. Di panel navigasi sebelah kiri, klik Go to HoloWeb.

    2. Di halaman HoloWeb, klik Security Center. Di halaman DB Authorization, lihat model izin saat ini.

    Jika database Anda menggunakan model otorisasi PostgreSQL standar dan berisi beberapa objek seperti tabel, view, atau foreign table, Anda dapat memanggil fungsi slpm_migrate untuk memigrasikan izin pengguna yang ada ke SLPM.

    call slpm_migrate ();  // Ubah pemilik objek yang ada di database menjadi developer untuk manajemen SLPM.

    Perhatikan hal berikut saat beralih dari model otorisasi PostgreSQL standar ke SLPM:

    Secara default, fungsi slpm_migrate hanya memigrasikan izin untuk 64 pengguna sekaligus. Angka ini dapat disesuaikan. Jika melibatkan banyak pengguna, Anda harus menjalankan fungsi ini beberapa kali hingga izin semua pengguna berhasil dimigrasikan. Untuk informasi selengkapnya tentang fungsi ini, lihat slpm_migrate.

  4. Buat pengguna di instans saat ini.

    Sebelum memberikan izin kepada pengguna baru, Anda harus membuat pengguna tersebut di instans saat ini. Jika pengguna sudah ada di instans, lewati langkah ini.

    Dalam perintah berikut, {dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer] adalah nama kelompok pengguna dalam database saat ini tempat Anda dapat menambahkan pengguna tersebut. Untuk informasi lebih lanjut, lihat Kelompok pengguna.

    call slpm_create_user ('ID akun Alibaba Cloud/Email Alibaba Cloud/RAM user'); // Buat pengguna. Jika menggunakan email Alibaba Cloud, sertakan dalam tanda kutip ganda.
    call slpm_create_user ('ID akun Alibaba Cloud/Email Alibaba Cloud/RAM user', '{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]');  // Buat pengguna dan tambahkan ke kelompok pengguna yang sesuai.
    Catatan
    • Jika Anda menggunakan UID RAM user untuk memberikan izin, Anda harus menambahkan awalan p4_ ke UID saat menjalankan slpm_create_user. Formatnya adalah p4_UID. Anda dapat memperoleh UID dari halaman Users di Konsol RAM. Untuk informasi selengkapnya tentang format RAM user, lihat Ikhtisar akun.

    • SLPM tidak mendukung nama akun kustom yang diakhiri dengan admin, developer, writer, viewer, atau all_users.

  5. Berikan izin kepada pengguna baru.

    Setelah membuat pengguna baru di instans, Anda harus menambahkan pengguna tersebut ke kelompok pengguna yang sesuai di database untuk menyelesaikan otorisasi. Jika Anda sudah menambahkan pengguna ke kelompok pengguna saat membuatnya, Anda tidak perlu memberikan izin lagi.

    Dalam perintah berikut, {dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer] adalah nama kelompok pengguna dalam database saat ini tempat Anda dapat menambahkan pengguna tersebut. Untuk informasi lebih lanjut, lihat Kelompok pengguna.

    call slpm_grant ('{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]', 'ID akun Alibaba Cloud/Email Alibaba Cloud/RAM user'); // Tambahkan pengguna ke kelompok pengguna.

    Contoh berikut menunjukkan cara menambahkan pengguna ke kelompok pengguna dengan izin berbeda.

    // Tambahkan pengguna ke kelompok admin database.
    call slpm_grant ('mydb.admin', '197006222995xxx'); // Tambahkan pengguna 197006222995xxx ke kelompok admin database mydb.
    call slpm_grant ('mydb.admin', 'ALIYUN$xxx'); // Tambahkan pengguna xxx@aliyun.com ke kelompok admin database mydb.
    
    // Tambahkan pengguna ke kelompok developer database.
    call slpm_grant ('mydb.public.developer', '197006222995xxx'); // Tambahkan pengguna 197006222995xxx ke kelompok developer database mydb.
    call slpm_grant ('mydb.public.developer', 'RAM$mainaccount:subuser');// Tambahkan RAM user subuser dari akun Alibaba Cloud mainaccount ke kelompok developer database mydb.
    
    // Tambahkan pengguna ke kelompok viewer database.
    call slpm_grant ('"MYDB.lisa.viewer"', '197006222995xxx'); // Tambahkan pengguna 197006222995xxx ke kelompok viewer database "MYDB".
    call slpm_grant ('mydb.lisa.viewer', '"xxx@aliyun.com"'); // Tambahkan pengguna xxx@aliyun.com ke kelompok viewer database mydb.

Hapus kelompok pengguna

Untuk menghapus pengguna dari kelompok pengguna di database, jalankan perintah berikut. Setelah pengguna dihapus, pengguna tersebut tidak lagi memiliki izin dari kelompok pengguna tersebut.

Dalam perintah berikut, {dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer] adalah nama kelompok pengguna dalam database saat ini tempat Anda dapat menambahkan pengguna tersebut. Untuk informasi lebih lanjut, lihat Kelompok pengguna.

call slpm_revoke ('{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]', 'ID akun Alibaba Cloud/Email Alibaba Cloud/RAM user'); // Cabut izin pengguna.

Contoh berikut menunjukkan cara menghapus pengguna dari kelompok pengguna dengan izin berbeda.

// Hapus pengguna dari kelompok admin database.
call slpm_revoke ('dbname.admin', 'p4_564306222995xxx');//Hapus RAM user 564306222995xxx dari kelompok admin.
call slpm_revoke ('dbname.admin', '197006222995xxx');//Hapus akun Alibaba Cloud 197006222995xxx dari kelompok admin.
call slpm_revoke ('dbname.admin', '"xxx@aliyun.com"');

// Hapus pengguna dari kelompok developer database.
call slpm_revoke ('mydb.lisa.developer', 'RAM$mainaccount:subuser'); // Hapus RAM user subuser dari kelompok developer database mydb.
call slpm_revoke ('mydb.public.developer', 'p4_564306222995xxx');//Hapus RAM user 564306222995xxx dari kelompok developer.

// Hapus pengguna dari kelompok viewer database.
call slpm_revoke ('"MYDB.SCHEMA1.viewer"', 'p4_564306222995xxx'); // Hapus RAM user 564306222995xxx dari kelompok viewer database "MYDB".

Hapus pengguna

Anda juga dapat menghapus pengguna sesuai kebutuhan. Setelah dihapus, pengguna tersebut akan dihapus dari instans saat ini dan kehilangan semua izin pada instans tersebut. Lakukan operasi ini dengan hati-hati.

DROP ROLE "ID akun Alibaba Cloud/Email Alibaba Cloud/RAM user"; // Menghapus pengguna dari instans.

Nonaktifkan model izin tingkat skema

Jika Anda tidak lagi memerlukan SLPM, Anda dapat mengikuti langkah-langkah berikut untuk menonaktifkan fitur ini.

  1. Nonaktifkan SLPM.

    Setelah SLPM diaktifkan, superuser dapat menonaktifkannya dengan menjalankan perintah pada contoh berikut. Setelah Anda menonaktifkan SLPM, kelompok pengguna tidak dihapus. Untuk informasi selengkapnya tentang izin yang tetap dimiliki pengguna dalam kelompok tersebut, lihat Fungsi model izin tingkat skema.

    call slpm_disable ();

    Catatan tentang menonaktifkan SLPM:

    • Hanya superuser yang dapat menjalankan operasi shutdown.

    • Izin USAGE dan CREATE pada skema public, izin CONNECT dan TEMPORARY pada database, izin EXECUTE pada fungsi dan prosedur, serta izin USAGE pada bahasa dan tipe data (termasuk domain) diberikan kepada PUBLIC.

    • Izin pada objek lain seperti tabel, view, materialized view, kolom tabel, sequence, foreign data wrapper, foreign server, dan skema (kecuali skema public) tidak diberikan kepada PUBLIC. Untuk memberikan izin tersebut, hubungi superuser.

    • Setelah Anda menonaktifkan SLPM, kelompok {db}.admin, {db}.{schemaname}.developer, {db}.{schemaname}.writer, dan {db}.{schemaname}.viewer tetap mempertahankan izin mereka pada objek yang ada. Izin tersebut tidak berlaku untuk objek database baru.

  2. Hapus kelompok pengguna. (Untuk manajemen yang lebih mudah, jangan hapus kelompok pengguna kecuali benar-benar diperlukan.)

    Setelah Anda menonaktifkan SLPM, Anda dapat memanggil fungsi slpm_cleanup untuk menghapus kelompok pengguna. Skenario berikut menjelaskan cara melakukannya:

    • Skenario 1: Hapus kelompok pengguna tetapi pertahankan database.

      Jika Anda ingin menghapus kelompok pengguna di database tetapi tetap menggunakan database tersebut, superuser dapat menjalankan pernyataan berikut.

      call slpm_cleanup ( '<dbname>' );
      Catatan

      Saat memanggil slpm_cleanup, pastikan tidak ada pernyataan SQL yang sedang berjalan di database. Jika tidak, pemanggilan tersebut mungkin gagal dan memengaruhi layanan Anda.

      Fungsi slpm_cleanup perlu mentransfer kepemilikan objek yang ada ke pengguna saat ini. Secara default, slpm_cleanup hanya mentransfer kepemilikan untuk 64 objek sekaligus. Angka ini dapat disesuaikan. Oleh karena itu, Anda mungkin perlu menjalankan slpm_cleanup beberapa kali hingga semua objek berhasil ditransfer (kami menyarankan menjalankannya kurang dari lima kali) dan semua kelompok pengguna yang tersisa dihapus. Untuk informasi selengkapnya tentang fungsi ini, lihat slpm_cleanup.

    • Skenario 2: Hapus database lalu hapus kelompok pengguna.

      Jika Anda telah menghapus database tetapi kelompok penggunanya masih ada, superuser dapat menjalankan pernyataan berikut di database lain, seperti postgres, untuk menghapus semua kelompok pengguna dari database asli.

      call slpm_cleanup ( 'mydb' );

Aktifkan kembali SLPM

Untuk mengaktifkan kembali SLPM karena alasan apa pun, ikuti langkah-langkah berikut.

  1. Purge izin pengguna

    Untuk menghindari konflik izin, jalankan perintah berikut untuk purge semua izin pengguna yang ada dari database sebelum mengaktifkan kembali SLPM.

    call slpm_cleanup ( '<dbname>' );
  2. Aktifkan kembali model izin SLPM

    Setelah Anda purge izin pengguna, jalankan perintah berikut untuk mengaktifkan model izin SLPM.

    -- Aktifkan SLPM dalam recovery model.
    call slpm_enable ('t'); 
    
    -- Perbarui pemilik objek yang ada di database menjadi developer untuk manajemen SLPM. Langkah ini wajib dilakukan.
    call slpm_migrate ();
  3. Berikan izin kepada pengguna

    Setelah Anda mengaktifkan kembali SLPM, Anda dapat memberikan izin kepada pengguna melalui Konsol Hologres atau menggunakan perintah SQL. Untuk informasi selengkapnya, lihat Berikan izin kepada pengguna.

Buat view lintas skema dalam mode SLPM (Beta)

Hanya Hologres V1.3.36 dan versi yang lebih baru yang mendukung pembuatan view lintas skema. Jika instans Anda lebih lama dari V1.3.36, lihat Error umum yang terjadi saat mempersiapkan peningkatan instans atau bergabunglah dengan grup DingTalk Hologres untuk memberikan masukan. Untuk informasi selengkapnya, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.

Deskripsi skenario

SLPM menyediakan manajemen izin sederhana di tingkat skema. Namun, dalam beberapa skenario bisnis, Anda mungkin perlu membuat view lintas skema. Misalnya, Anda dapat membuat skema untuk lapisan gudang data yang berbeda, seperti operation data store (ODS), DWD, data warehouse service (DWS), dan ADS, lalu membuat tabel di setiap lapisan. Terkadang, Anda mungkin perlu membuat view lintas skema. Misalnya, Anda dapat menggunakan tabel dari lapisan DWS dan DWD untuk membuat view di lapisan ADS untuk layanan bisnis, seperti yang ditunjukkan pada tabel berikut:

Database

Skema

Tabel

View

erp_db

ods

orders

Not applicable

dwd

customer

Not applicable

ads

Not applicable

Nama tampilan: customer_total_order_price

View DDL:

CREATE VIEW ads.customer_total_order_price_view AS
SELECT
    c_name,
    sum(o_totalprice)
FROM
    ods.orders AS o
INNER JOIN dwd.customer AS c
ON o.o_custkey = c.c_custkey
GROUP BY
    1;

Aktifkan fitur view lintas skema

  • Catatan

    • Fitur view lintas skema dinonaktifkan secara default.

    • Saat membuat view lintas skema, pembuat harus memiliki izin developer pada skema tempat view berada. Pembuat juga harus memiliki izin viewer atau lebih tinggi pada semua tabel yang digunakan dalam view tersebut.

      Dalam skenario yang dijelaskan, untuk membuat view customer_total_order_price_view di skema ads menggunakan akun ads_dev_user, akun ads_dev_user harus memiliki izin developer pada skema ads dan izin viewer pada skema ods dan dwd.

    • Untuk mengkueri view lintas skema, pengguna hanya memerlukan izin viewer atau lebih tinggi pada skema tempat view berada.

      Misalnya, agar akun ads_view_user dapat melihat view ads.customer_total_order_price_view, Anda hanya perlu memberikan izin ads_view_user sebagai viewer atau lebih tinggi pada skema ads.

    • Setelah Anda mengaktifkan fitur view lintas skema, pengguna yang membuat view menjadi pemilik view tersebut. Hanya pemilik view yang dapat memodifikasi atau menghapusnya.

      Dalam skenario yang dijelaskan, pemilik view ads.customer_total_order_price_view adalah akun ads_dev_user. Jika akun ads_dev_user perlu dihapus dari database, Anda dapat menggunakan pernyataan SQL berikut untuk mentransfer kepemilikan view tersebut. Pastikan pemilik baru memiliki izin viewer atau lebih tinggi pada skema semua tabel dalam view tersebut dan izin developer pada skema tempat view berada.

      -- Syntax
      call slpm_alter_view_owner('view_name', 'ID akun Alibaba Cloud/Email Alibaba Cloud/RAM user');
      
      -- Contoh: Transfer kepemilikan view ads.customer_total_order_price_view ke p4_xxxxx.
      call slpm_alter_view_owner ('ads.customer_total_order_price_view', 'p4_xxxxx');
  • Gunakan perintah.

    Untuk membuat view lintas skema, superuser dapat menjalankan pernyataan SQL berikut untuk mengaktifkan fitur ini.

    call slpm_enable_multi_schema_view();

    Setelah pernyataan dieksekusi, Anda dapat membuat view lintas skema.

Nonaktifkan fitur view lintas skema

Jika Anda tidak lagi perlu membuat view lintas skema, Anda dapat menjalankan pernyataan SQL berikut untuk menonaktifkan fitur ini.

-- Nonaktifkan fitur view lintas skema.
call slpm_disable_multi_schema_view();
-- Transfer kepemilikan semua view ke role developer dari skema tempat view berada.
call slpm_migrate();

Setelah pernyataan dieksekusi, view non-lintas skema masih dapat dikueri, dan perilaku default SLPM dipulihkan. View lintas skema tidak dapat lagi dikueri.