All Products
Search
Document Center

Hologres:Menggunakan model izin tingkat skema

Last Updated:Aug 19, 2026

Model izin tingkat skema (SLPM) memusatkan pengelolaan izin di Hologres. Alih-alih memberikan hak istimewa tingkat tabel satu per satu, SLPM mengelompokkan pengguna ke dalam kelompok bawaan—admin, developer, writer, dan viewer—lalu menerapkan izin secara otomatis pada tingkat skema. Cukup tambahkan pengguna ke kelompok yang sesuai; tidak diperlukan pernyataan GRANT atau ALTER DEFAULT PRIVILEGES.

Halaman ini menjelaskan cara mengaktifkan SLPM, mengelola keanggotaan kelompok pengguna, serta menangani operasi siklus hidup seperti menonaktifkan dan mengaktifkan kembali model tersebut.

Batasan

SLPM menerapkan isolasi ketat tingkat skema. Sebelum mengaktifkannya, perhatikan hal-hal berikut:

  • Tampilan dan aturan lintas-skema tidak didukung. Jika suatu tampilan atau aturan mereferensikan tabel dari lebih dari satu skema, tampilan atau aturan tersebut menjadi tidak dapat diakses dan mengembalikan ERROR: permission denied for table. Hindari pembuatan tampilan atau aturan lintas-skema di database yang dikelola oleh SLPM. Untuk pengecualian yang tersedia mulai V1.3.36 dan versi setelahnya, lihat Create cross-schema views in SLPM mode (Beta).

  • Perintah DDL standar digantikan oleh padanan SLPM. Tabel berikut mencantumkan perintah yang terpengaruh.

    Perintah standar Alasan penggantian Padanan SLPM
    alter table owner to xx Semua tabel dimiliki oleh kelompok developer skema secara otomatis. Tidak diperlukan.
    grant Izin diberikan dengan menambahkan pengguna ke kelompok. slpm_grant
    revoke Izin dicabut dengan menghapus pengguna dari kelompok. slpm_revoke
    alter default privileges Tabel baru mewarisi izin secara otomatis berdasarkan kelompok pengguna. Tidak diperlukan.
    create / drop / alter / rename pada kelompok pengguna bawaan Keempat kelompok bawaan dikelola oleh sistem. Tidak berlaku.
    rename schema Penggantian nama skema harus melalui SLPM agar ikatan kelompok tetap konsisten. slpm_rename_schema
    drop database Kelompok pengguna harus dibersihkan setelah database dihapus. Jalankan drop database, lalu panggil slpm_cleanup('<DBNAME>').
  • Nama akun kustom tidak boleh diakhiri dengan admin, developer, writer, viewer, atau all_users.

Aktifkan SLPM

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

  • Akses superuser ke instans Hologres

  • Tool pengembangan yang terhubung ke instans (misalnya, HoloWeb atau psql)

Aktifkan SLPM untuk database

  1. Instal ekstensi SLPM. Jalankan perintah ini sekali per database.

    create extension slpm;
  2. Aktifkan SLPM. Pastikan tidak ada pernyataan SQL yang sedang berjalan di database saat menjalankan perintah ini.

    call slpm_enable ();
  3. (Opsional) Migrasi dari model izin PostgreSQL standar. Jika database sudah memiliki tabel, tampilan, atau tabel eksternal yang dikelola dengan model PostgreSQL standar, migrasikan kepemilikan objek yang ada ke SLPM menggunakan perintah berikut.

    Untuk memeriksa model izin aktif sebelum migrasi:

    1. Masuk ke Hologres console. Di panel navigasi kiri, klik Go to HoloWeb.

    2. Klik Security Center. Di halaman DB Authorization, periksa model izin saat ini.

    slpm_migrate memproses hingga 64 pengguna per eksekusi (dapat disesuaikan). Jika database memiliki lebih banyak pengguna, jalankan fungsi ini beberapa kali hingga semua izin dimigrasikan. Untuk detail parameter, lihat slpm_migrate.
    -- Transfer ownership of existing objects to the developer group for SLPM management.
    call slpm_migrate ();

Berikan izin

Izin SLPM diberikan dengan menambahkan pengguna ke kelompok pengguna. Setiap kelompok dipetakan ke skema dan tingkat izin tertentu:

Kelompok Format Izin
admin {dbname}.admin Administrasi database
developer {dbname}.{schemaname}.developer Baca dan tulis, DDL
writer {dbname}.{schemaname}.writer Baca dan tulis
viewer {dbname}.{schemaname}.viewer Hanya baca

Untuk detail lengkap tentang kemampuan masing-masing kelompok, lihat User groups and permissions in SLPM.

Langkah 1: Buat pengguna

Lewati langkah ini jika pengguna sudah ada di instans.

-- Create a user.
call slpm_create_user('<ACCOUNT>');

-- Create a user and add them to a group in one step.
call slpm_create_user('<ACCOUNT>', '{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]');

Ganti <ACCOUNT> dengan salah satu format berikut:

Jenis akun Format Contoh
ID akun Alibaba Cloud ID numerik 197006222995xxx
Alibaba Cloud Mailbox ALIYUN$xxx atau "xxx@aliyun.com" (diapit tanda kutip ganda) "xxx@aliyun.com"
Pengguna RAM RAM$mainaccount:subuser RAM$mycompany:alice
UID Pengguna RAM p4_UID p4_564306222995xxx
Untuk menggunakan UID Pengguna RAM, tambahkan awalan p4_. Dapatkan UID dari halaman Users di Konsol RAM. Untuk informasi lebih lanjut tentang format akun, lihat Account system.

Langkah 2: Tambahkan pengguna ke kelompok

call slpm_grant('{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]', '<ACCOUNT>');

Jika Anda sudah menambahkan pengguna ke kelompok saat pembuatan, lewati langkah ini.

Contoh:

Contoh berikut menambahkan akun Alibaba Cloud ke kelompok admin mydb.

call slpm_grant('mydb.admin', '197006222995xxx');
call slpm_grant('mydb.admin', 'ALIYUN$xxx');

Contoh berikut menambahkan pengguna ke kelompok developer skema public di mydb.

call slpm_grant('mydb.public.developer', '197006222995xxx');
call slpm_grant('mydb.public.developer', 'RAM$mainaccount:subuser');

Contoh berikut menambahkan pengguna ke kelompok viewer skema lisa di MYDB (nama database case-sensitive).

call slpm_grant('"MYDB.lisa.viewer"', '197006222995xxx');
call slpm_grant('mydb.lisa.viewer', '"xxx@aliyun.com"');

Hapus pengguna dari kelompok

Menghapus pengguna dari kelompok mencabut semua izin yang terkait dengan kelompok tersebut.

call slpm_revoke('{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]', '<ACCOUNT>');

Contoh:

Contoh berikut menghapus pengguna dari kelompok admin dbname.

call slpm_revoke('dbname.admin', 'p4_564306222995xxx');
call slpm_revoke('dbname.admin', '197006222995xxx');
call slpm_revoke('dbname.admin', '"xxx@aliyun.com"');

Contoh berikut menghapus pengguna RAM dari kelompok developer skema lisa di mydb.

call slpm_revoke('mydb.lisa.developer', 'RAM$mainaccount:subuser');
call slpm_revoke('mydb.public.developer', 'p4_564306222995xxx');

Contoh berikut menghapus pengguna RAM dari kelompok viewer SCHEMA1 di MYDB (nama case-sensitive).

call slpm_revoke('"MYDB.SCHEMA1.viewer"', 'p4_564306222995xxx');

Hapus pengguna

Menghapus pengguna mengeluarkannya dari instans dan mencabut semua izin tingkat instans. Tindakan ini tidak dapat dikembalikan.

DROP ROLE "<ACCOUNT>";

Nonaktifkan SLPM

Langkah 1: Nonaktifkan model

Hanya superuser yang dapat menonaktifkan SLPM.

call slpm_disable ();

Setelah dinonaktifkan:

  • Keempat kelompok pengguna ({db}.admin, {db}.{schemaname}.developer, {db}.{schemaname}.writer, {db}.{schemaname}.viewer) mempertahankan izin mereka pada objek yang sudah ada. Izin tersebut tidak berlaku untuk objek baru.

  • PUBLIC diberikan izin berikut: USAGE dan CREATE pada skema public; CONNECT dan TEMPORARY pada database; EXECUTE pada fungsi dan prosedur; USAGE pada bahasa dan tipe data (termasuk domain).

  • PUBLIC tidak diberikan izin pada tabel, tampilan, tampilan yang di-materialisasi, kolom tabel, sequence, pembungkus data asing, server asing, atau skema non-public. Hubungi superuser untuk memberikan izin tersebut satu per satu.

Langkah 2: Bersihkan kelompok pengguna (opsional)

Kelompok pengguna tidak dihapus secara otomatis saat SLPM dinonaktifkan. Untuk menghapusnya, panggil slpm_cleanup.

Pastikan tidak ada pernyataan SQL yang sedang berjalan di database sebelum memanggil slpm_cleanup. slpm_cleanup mentransfer kepemilikan objek dalam batch berisi 64 objek (dapat disesuaikan). Jalankan beberapa kali jika diperlukan, tetapi hindari lebih dari lima kali eksekusi. Untuk detailnya, lihat slpm_cleanup.

Skenario 1: Hapus kelompok pengguna tetapi pertahankan database.

Jalankan perintah berikut di database target sebagai superuser.

call slpm_cleanup('<DBNAME>');

Skenario 2: Hapus kelompok pengguna setelah database dihapus.

Jalankan perintah berikut di database lain (misalnya, postgres) sebagai superuser.

call slpm_cleanup('mydb');

Aktifkan kembali SLPM

  1. Bersihkan izin yang ada untuk mencegah konflik.

    call slpm_cleanup ( '<DBNAME>' );
  2. Aktifkan kembali SLPM dalam mode pemulihan, lalu transfer kepemilikan objek.

    -- Enable SLPM in recovery mode.
    call slpm_enable ('t');
    
    -- Transfer ownership of existing objects to the developer group.
    call slpm_migrate ();
  3. Berikan izin kepada pengguna. Gunakan slpm_grant seperti dijelaskan dalam Grant permissions, atau gunakan Konsol Hologres. Untuk detailnya, lihat Grant permissions.

Create cross-schema views in SLPM mode (Beta)

Tampilan lintas-skema memerlukan Hologres V1.3.36 atau versi setelahnya. Jika instans Anda menggunakan versi sebelumnya, lihat Common errors that occur when you prepare for an instance upgrade atau hubungi dukungan melalui online support.

Secara default, SLPM tidak mengizinkan tampilan yang mereferensikan tabel dari lebih dari satu skema. Fitur tampilan lintas-skema menghilangkan batasan ini untuk kasus penggunaan tertentu.

Kapan menggunakan fitur ini

Pola umum gudang data adalah mengorganisasi data ke dalam skema berlapis—misalnya, gudang data operasi (ODS), DWD, layanan gudang data (DWS), dan ADS—lalu membuat tampilan ringkasan di lapisan luar yang melakukan join tabel dari beberapa lapisan dalam.

Pertimbangkan contoh berikut di mana tampilan di skema ads melakukan join tabel dari ods dan dwd:

Database Skema Objek
erp_db ods Tabel: orders
erp_db dwd Tabel: customer
erp_db ads Tampilan: customer_total_order_price_view

DDL tampilan:

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;

Persyaratan izin

Tindakan Izin yang diperlukan
Membuat tampilan lintas-skema developer pada skema tempat tampilan berada, ditambah viewer atau lebih tinggi pada semua tabel yang digunakan dalam tampilan
Menanyakan tampilan lintas-skema viewer atau lebih tinggi pada skema tempat tampilan berada
Memodifikasi atau menghapus tampilan lintas-skema Harus merupakan pemilik tampilan

Dalam contoh di atas, untuk membuat ads.customer_total_order_price_view sebagai ads_dev_user:

  • Berikan izin developer kepada ads_dev_user pada ads.

  • Berikan izin viewer kepada ads_dev_user pada ods dan dwd.

Untuk mengizinkan ads_view_user menanyakan tampilan tersebut, berikan izin viewer kepada ads_view_user pada ads.

Setelah Anda beralih dari model izin sederhana (SPM) ke SLPM, tampilan lintas-skema yang sudah ada menjadi tidak dapat diakses, dan kueri terhadapnya gagal dengan error permission denied for table. Jalankan perintah berikut sebagai superuser untuk mengaktifkan fitur tampilan lintas-skema, lalu buat ulang tampilan lintas-skema yang ada:

call slpm_enable_multi_schema_view();
-- Re-create the cross-schema view
CREATE OR REPLACE VIEW schema_b.cross_schema_view AS
SELECT a.id, a.name, b.value
FROM schema_a.table_a a
JOIN schema_b.table_b b ON a.id = b.id;

Mengaktifkan fitur saja, tanpa membuat ulang tampilan, tidak akan menyelesaikan error izin tersebut.

Aktifkan fitur tampilan lintas-skema

Jalankan perintah berikut sebagai superuser.

call slpm_enable_multi_schema_view();

Transfer kepemilikan tampilan

Setelah fitur diaktifkan, pengguna yang membuat tampilan menjadi pemiliknya. Hanya pemilik yang dapat memodifikasi atau menghapusnya. Untuk mentransfer kepemilikan—misalnya, sebelum menghapus pengguna dari database—jalankan perintah berikut. Pemilik baru harus memiliki izin developer pada skema tampilan dan viewer atau lebih tinggi pada semua skema sumber.

-- Syntax
call slpm_alter_view_owner('<VIEW_NAME>', '<ACCOUNT>');

-- Example: transfer ownership of ads.customer_total_order_price_view to p4_xxxxx.
call slpm_alter_view_owner('ads.customer_total_order_price_view', 'p4_xxxxx');

Nonaktifkan fitur tampilan lintas-skema

-- Disable cross-schema view support.
call slpm_disable_multi_schema_view();
-- Transfer all view ownership back to the developer group of each view's schema.
call slpm_migrate();

Setelah menjalankan perintah-perintah ini, tampilan non-lintas-skema yang sudah ada tetap dapat ditanyakan dan SLPM berperilaku normal. Tampilan lintas-skema tidak lagi dapat ditanyakan.

Langkah selanjutnya