全部产品
Search
文档中心

Hologres:Gunakan SLPM

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menggunakan Model Izin Tingkat Skema (SLPM) di Hologres dengan mengeksekusi pernyataan SQL.

Batasan

SLPM mengelola izin pada skema secara ketat. Saat menggunakan model ini untuk memberikan izin, perhatikan hal-hal berikut:

  • Izin tidak dibagi antar skema. Jika Anda merujuk dua atau lebih tabel dalam skema yang berbeda saat membuat tampilan atau aturan, the created view or rule cannot be accessed. Dalam hal ini, pesan kesalahan ERROR: permission denied for table akan ditampilkan. Kami sarankan agar Anda tidak membuat tampilan atau aturan dengan menggunakan tabel dalam skema yang berbeda di database tempat SLPM diaktifkan. Untuk informasi lebih lanjut tentang cara membuat tampilan lintas skema, lihat Buat tampilan lintas skema menggunakan SLPM (beta) dalam topik ini.

  • Setelah SLPM diaktifkan, hanya izin tertentu yang dapat diberikan. Untuk informasi lebih lanjut tentang izin tersebut, lihat Berikan izin menggunakan SLPM dalam topik ini. Setelah mengaktifkan SLPM untuk database, Anda tidak dapat melakukan operasi dengan mengeksekusi pernyataan DDL yang dijelaskan dalam tabel berikut. Anda harus melakukan operasi terkait dengan memanggil fungsi SLPM yang sesuai dengan pernyataan DDL tersebut. Untuk informasi lebih lanjut tentang fungsi-fungsi tersebut, lihat Fungsi SLPM.

    Pernyataan DDL

    Deskripsi

    Fungsi SLPM

    alter table owner to xx

    Setelah Anda mengaktifkan SLPM untuk database, kepemilikan semua tabel dalam skema database dipindahkan ke anggota grup {db}.{schema}.developer. Anda tidak dapat memindahkan kepemilikan tabel-tabel tersebut.

    Kepemilikan tabel dipindahkan secara otomatis.

    grant

    Setelah Anda menambahkan pengguna ke grup pengguna, pengguna secara otomatis diberi izin dari grup pengguna tersebut. Anda tidak perlu memanggil fungsi slpm_grant untuk memberikan izin grup pengguna kepada pengguna tersebut.

    slpm_grant

    revoke

    Anda tidak dapat memanggil fungsi slpm_revoke untuk mencabut izin tertentu dari pengguna. Sebagai gantinya, Anda dapat menghapus pengguna dari grup pengguna tertentu untuk mencabut izin tertentu dari pengguna tersebut.

    slpm_revoke

    alter default privileges

    Dalam model otorisasi PostgreSQL standar, Anda hanya dapat memberikan izin kepada pengguna pada tabel dan objek yang sudah ada. Untuk mengelola objek dan tabel yang akan dibuat di masa mendatang, Anda harus memberikan izin yang diperlukan lagi. Dalam SLPM, Anda dapat menambahkan pengguna ke grup pengguna untuk memberikan izin yang diperlukan pada semua tabel atau objek dari jenis tertentu, termasuk objek dan tabel dari jenis-jenis tersebut yang akan dibuat di masa mendatang.

    Pengguna diberi izin yang diperlukan saat mereka ditambahkan ke grup pengguna.

    create/drop/alter/rename default user groups

    Setelah SLPM diaktifkan, grup pengguna {db}.admin, {db}.{schema}.developer, {db}.{schema}.writer, dan {db}.{schema}.viewer dibuat oleh sistem secara default. Semua pengguna termasuk superuser tidak dapat membuat, memodifikasi, atau menghapus grup pengguna tersebut.

    Tidak tersedia.

    rename schema

    Untuk mengganti nama skema, Anda harus memanggil fungsi slpm_rename_schema dalam database tetapi jangan mengeksekusi pernyataan alter rename schema.

    slpm_rename_schema

    rename database

    Untuk mengganti nama database, Anda harus memanggil fungsi slpm_rename_database tetapi jangan mengeksekusi pernyataan alter rename database.

    slpm_rename_database

    drop database

    Untuk menghapus database, Anda harus mengeksekusi pernyataan drop database dan memanggil fungsi slpm_cleanup('<dbname>') untuk menghapus pengguna default.

    Untuk menghapus database, Anda harus mengeksekusi pernyataan drop database dan memanggil fungsi slpm_cleanup('<dbname>') untuk menghapus pengguna default.

  • Hanya Hologres V1.3.36 dan versi lebih baru yang mendukung pembuatan tampilan lintas skema. Jika versi instance Hologres Anda lebih lama dari V1.3.36, tingkatkan instance Hologres Anda secara manual di Konsol Hologres atau bergabunglah dengan grup DingTalk Hologres untuk mengajukan peningkatan instance. Untuk informasi lebih lanjut tentang cara meningkatkan instance Hologres secara manual, lihat Tingkatkan instance. Untuk informasi lebih lanjut tentang cara bergabung dengan grup DingTalk Hologres, lihat Dapatkan dukungan online untuk Hologres.

Berikan izin menggunakan SLPM

Setelah menggunakan alat pengembangan untuk terhubung ke instance Hologres, Anda dapat mengaktifkan SLPM untuk memberikan izin kepada pengguna dengan mengeksekusi pernyataan SQL. Dengan cara ini, pengguna diberi izin yang diperlukan pada skema.

  1. Aktifkan pemanggilan fungsi.

    Sebelum mengaktifkan SLPM, Anda harus mengeksekusi pernyataan berikut untuk mengaktifkan pemanggilan fungsi. Dalam contoh ini, pernyataan create extension dieksekusi hanya sekali dalam database.

    create extension slpm;
  2. Aktifkan SLPM.

    Secara default, SLPM dinonaktifkan. Anda harus mengeksekusi pernyataan berikut untuk mengaktifkan SLPM untuk database sebagai superuser. Pastikan tidak ada pernyataan SQL yang sedang dieksekusi dalam database saat mengaktifkan SLPM. Jika tidak, aktivasi SLPM mungkin gagal dan bisnis Anda dapat terpengaruh.

    call slpm_enable ();  // Aktifkan SLPM untuk database saat ini.
  3. Opsional. Beralih dari model otorisasi PostgreSQL standar ke SLPM untuk objek yang ada.

    Anda dapat melakukan langkah-langkah berikut untuk menanyakan model izin:

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

    2. Di halaman HoloWeb, klik Security Center dan lihat model izin yang digunakan di halaman Database Authorization.

    Jika database menggunakan model otorisasi PostgreSQL standar dan berisi objek seperti tabel, tampilan, dan tabel asing, Anda dapat memanggil fungsi slpm_migrate untuk beralih dari model otorisasi PostgreSQL standar ke SLPM untuk objek-objek tersebut.

    call slpm_migrate ();  // Pindahkan kepemilikan objek yang ada dalam database ke pengembang yang ditentukan dalam SLPM.

    Saat beralih dari model otorisasi PostgreSQL standar ke SLPM untuk objek-objek tersebut, perhatikan informasi berikut:

    Secara default, setiap kali Anda memanggil fungsi slpm_migrate, fungsi tersebut memindahkan kepemilikan hingga 64 objek ke pengembang yang ditentukan dalam SLPM. Anda dapat memodifikasi parameter batch_size dalam fungsi ini. Jika jumlah objek melebihi 64, Anda harus memanggil fungsi slpm_migrate berulang kali sampai kepemilikan semua objek dipindahkan. Untuk informasi lebih lanjut tentang fungsi ini, lihat slpm_migrate.

  4. Buat pengguna di instance Hologres.

    Sebelum memberikan izin kepada pengguna, Anda harus membuat pengguna di instance Hologres saat ini. Jika Anda memberikan izin kepada pengguna yang sudah ada di instance, lewati langkah ini.

    Dalam pernyataan berikut, klausa {dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer] digunakan untuk menentukan grup pengguna di database saat ini. Untuk informasi lebih lanjut tentang grup pengguna, lihat Ikhtisar.

    call slpm_create_user ('ID akun Alibaba Cloud/Alamat email Alibaba Cloud/ID pengguna RAM'); // Buat pengguna di instance Hologres. Alamat email Alibaba Cloud harus diapit tanda kutip ganda ("). 
    call slpm_create_user ('ID akun Alibaba Cloud/Alamat email Alibaba Cloud/ID pengguna RAM', '{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]');  // Buat pengguna di instance Hologres dan tambahkan pengguna ke grup pengguna database.

    Catatan
    • Saat memanggil fungsi slpm_create_user untuk menambahkan pengguna RAM ke instance Hologres, Anda harus menambahkan awalan p4_ pada ID pengguna (UID) pengguna RAM. Contoh: p4_UID. Anda dapat pergi ke halaman Pengguna di Konsol RAM untuk mendapatkan UID pengguna RAM. Untuk informasi lebih lanjut tentang nama tampilan pengguna RAM di Hologres, lihat Ikhtisar.

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

  5. Tambahkan pengguna ke grup pengguna.

    Setelah membuat pengguna di instance Hologres, Anda harus menambahkan pengguna ke grup pengguna dalam database untuk memberikan izin kepada pengguna. Jika Anda telah menentukan grup pengguna untuk pengguna saat membuat pengguna, lewati langkah ini.

    Dalam pernyataan berikut, klausa {dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer] digunakan untuk menentukan grup pengguna di database saat ini. Untuk informasi lebih lanjut tentang grup pengguna, lihat Ikhtisar.

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

    Anda dapat mengeksekusi salah satu pernyataan berikut untuk menambahkan pengguna ke grup pengguna tertentu:

    // Tambahkan pengguna ke grup pengguna {db}.admin dari database.
    call slpm_grant ('mydb.admin', '197006222995xxx'); // Tambahkan pengguna dengan UID 197006222995xxx ke grup pengguna mydb.admin.
    call slpm_grant ('mydb.admin', 'ALIYUN$xxx'); // Tambahkan pengguna dengan alamat email Alibaba Cloud xxx@aliyun.com ke grup pengguna mydb.admin.
    
    // Tambahkan pengguna ke grup pengguna {db}.{schema}.developer dari database.
    call slpm_grant ('mydb.public.developer', '197006222995xxx'); // Tambahkan pengguna dengan UID 197006222995xxx ke grup pengguna mydb.public.developer.
    call slpm_grant ('mydb.public.developer', 'RAM$mainaccount:subuser'); // Tambahkan pengguna RAM bernama subuser dari akun Alibaba Cloud bernama mainaccount ke grup pengguna mydb.public.developer.
    
    // Tambahkan pengguna ke grup pengguna {db}.{schema}.viewer dari database.
    call slpm_grant ('"MYDB.lisa.viewer"', '197006222995xxx'); // Tambahkan pengguna dengan UID 197006222995xxx ke grup pengguna MYDB.lisa.viewer.
    call slpm_grant ('mydb.lisa.viewer', '"xxx@aliyun.com"'); // Tambahkan pengguna dengan alamat email Alibaba Cloud xxx@aliyun.com ke grup pengguna mydb.lisa.viewer.

Hapus pengguna dari grup pengguna

Anda dapat mengeksekusi pernyataan berikut untuk menghapus pengguna dari grup pengguna. Setelah pengguna dihapus dari grup pengguna, pengguna tersebut tidak memiliki izin dari grup pengguna tersebut.

Dalam pernyataan berikut, klausa {dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer] digunakan untuk menentukan grup pengguna di database saat ini. Untuk informasi lebih lanjut tentang grup pengguna, lihat Ikhtisar.

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

Anda dapat mengeksekusi salah satu pernyataan berikut untuk menghapus pengguna dari grup pengguna tertentu:

// Hapus pengguna dari grup pengguna {db}.admin dari database.
call slpm_revoke ('dbname.admin', 'p4_564306222995xxx'); // Hapus pengguna RAM dengan UID 564306222995xxx dari grup pengguna {db}.admin.
call slpm_revoke ('dbname.admin', '197006222995xxx'); // Hapus pengguna dengan ID akun Alibaba Cloud 197006222995xxx dari grup pengguna {db}.admin.
call slpm_revoke ('dbname.admin', '"xxx@aliyun.com"');

// Hapus pengguna dari grup pengguna {db}.{schema}.developer dari database.
call slpm_revoke ('mydb.lisa.developer', 'RAM$mainaccount:subuser'); // Hapus pengguna RAM bernama subuser dari grup pengguna mydb.lisa.developer.
call slpm_revoke ('mydb.public.developer', 'p4_564306222995xxx'); // Hapus pengguna RAM dengan UID 564306222995xxx dari grup pengguna mydb.public.developer.

// Hapus pengguna dari grup pengguna {db}.{schema}.viewer dari database.
call slpm_revoke ('"MYDB.SCHEMA1.viewer"', 'p4_564306222995xxx'); // Hapus pengguna RAM dengan UID 564306222995xxx dari grup pengguna MYDB.SCHEMA1.viewer.

Hapus pengguna

Anda dapat menghapus pengguna berdasarkan kebutuhan bisnis Anda. Setelah pengguna dihapus dari instance Hologres, pengguna tersebut tidak memiliki izin pada instance tersebut. Lakukan dengan hati-hati.

DROP ROLE "ID akun Alibaba Cloud/Alamat email Alibaba Cloud/ID pengguna RAM"; // Hapus pengguna dari instance Hologres.

Nonaktifkan SLPM

Jika Anda tidak lagi memerlukan SLPM, Anda dapat melakukan langkah-langkah berikut untuk menonaktifkannya.

  1. Nonaktifkan SLPM.

    Setelah SLPM diaktifkan, superuser dapat mengeksekusi pernyataan berikut untuk menonaktifkan SLPM untuk database. Setelah superuser menonaktifkan SLPM untuk database, grup pengguna database tidak dihapus. Untuk informasi lebih lanjut tentang izin anggota dalam grup pengguna, lihat Fungsi SLPM.

    call slpm_disable ();

    Saat menonaktifkan SLPM, perhatikan item berikut:

    • Hanya superuser yang dapat menonaktifkan SLPM untuk database.

    • Setelah SLPM dinonaktifkan, grup PUBLIC diberi izin USAGE dan CREATE pada skema publik database, izin CONNECT dan TEMPORARY pada database, izin EXECUTE pada fungsi dan prosedur database, serta izin USAGE pada bahasa dan tipe data (termasuk domain) database.

    • Setelah SLPM dinonaktifkan, grup PUBLIC tidak memiliki izin pada objek selain yang disebutkan sebelumnya. Misalnya, grup PUBLIC tidak memiliki izin pada tabel, tampilan, tampilan material, kolom tabel, urutan, pembungkus data asing, server asing, atau skema. Skema publik dikecualikan. Hubungi superuser untuk mendapatkan izin ini berdasarkan kebutuhan bisnis Anda.

    • Setelah SLPM dinonaktifkan, anggota dalam grup pengguna {db}.admin, {db}.{schemaname}.developer, {db}.{schemaname}.writer, dan {db}.{schemaname}.viewer mempertahankan izin yang diperoleh pada objek yang ada tetapi tidak memiliki izin pada objek baru.

  2. Hapus grup pengguna database. Untuk memudahkan manajemen pengguna, kami sarankan Anda mempertahankan grup pengguna.

    Setelah SLPM dinonaktifkan, Anda dapat memanggil fungsi slpm_cleanup untuk menghapus grup pengguna database dalam salah satu kasus berikut:

    • Kasus 1: Hapus grup pengguna dari database yang ada

      Jika Anda ingin menghapus grup pengguna tetapi tetap mempertahankan database, eksekusi pernyataan berikut sebagai superuser:

      call slpm_cleanup ( '<dbname>' );
      Catatan

      Saat memanggil fungsi slpm_cleanup, pastikan tidak ada pernyataan SQL yang sedang dieksekusi dalam database. Jika tidak, Anda mungkin gagal menghapus grup pengguna dan bisnis Anda mungkin terpengaruh.

      Fungsi slpm_cleanup digunakan untuk mentransfer kepemilikan objek ke pengguna saat ini. Namun, kepemilikan hingga 64 objek dapat ditransfer menggunakan fungsi ini setiap kali. Anda dapat memodifikasi parameter batch_size dalam fungsi ini. Akibatnya, Anda mungkin perlu memanggil fungsi slpm_cleanup berulang kali sampai kepemilikan semua objek ditransfer dan semua grup pengguna database dihapus. Kami sarankan Anda memanggil ulang fungsi ini tidak lebih dari lima kali. Untuk informasi lebih lanjut tentang fungsi ini, lihat slpm_cleanup.

    • Kasus 2: Hapus grup pengguna dari database yang dihapus

      Untuk menghapus grup pengguna dari database yang dihapus, eksekusi pernyataan berikut di database lain sebagai superuser. Dalam contoh ini, eksekusi pernyataan di database postgres.

      call slpm_cleanup ( 'mydb' );

Aktifkan SLPM lagi

Anda dapat melakukan operasi berikut untuk mengaktifkan SLPM untuk database lagi.

  1. Cabut izin dari pengguna.

    Sebelum mengaktifkan SLPM, kami sarankan Anda mengeksekusi pernyataan berikut untuk mencabut semua izin pengguna dalam database:

    call slpm_cleanup ( '<dbname>' );
  2. Aktifkan SLPM lagi.

    Setelah izin pengguna dicabut, eksekusi pernyataan berikut untuk mengaktifkan SLPM lagi:

    -- Aktifkan SLPM dalam mode pemulihan.
    call slpm_enable ('t');
    
    -- Transfer kepemilikan objek yang ada dalam database ke pengembang yang ditentukan dalam SLPM. Pernyataan ini harus dieksekusi.
    call slpm_migrate ();
  3. Berikan izin kepada pengguna.

    Setelah SLPM diaktifkan kembali, Anda dapat memberikan izin kepada pengguna di Konsol Hologres atau dengan mengeksekusi pernyataan SQL. Untuk informasi lebih lanjut, lihat bagian "Berikan izin kepada pengguna" dalam <Kelola Database.

Buat tampilan lintas skema menggunakan SLPM (beta)

Hanya Hologres V1.3.36 dan versi lebih baru yang mendukung pembuatan tampilan lintas skema. Jika versi instance Hologres Anda lebih lama dari V1.3.36, tingkatkan instance Hologres Anda secara manual di Konsol Hologres atau bergabunglah dengan grup DingTalk Hologres untuk mengajukan peningkatan instance. Untuk informasi lebih lanjut tentang cara meningkatkan instance Hologres secara manual, lihat Tingkatkan Instance. Untuk informasi lebih lanjut tentang cara bergabung dengan grup DingTalk Hologres, lihat Dapatkan Dukungan Online untuk Hologres.

Skenario

SLPM mengelola izin pada skema. Dalam beberapa skenario bisnis, Anda mungkin perlu membuat tampilan lintas skema. Misalnya, dalam skenario bisnis tertentu, Anda dapat membuat skema untuk lapisan data termasuk ODS, DWD, DWS, dan ADS dari gudang data, lalu buat tabel di lapisan data tersebut. Namun, terkadang Anda perlu membuat tampilan lintas skema. Misalnya, Anda perlu membuat tampilan ADS menggunakan tabel yang dibuat di lapisan data DWS dan DWD untuk memenuhi kebutuhan bisnis, seperti yang dijelaskan dalam tabel berikut.

Database

Skema

Tabel

Tampilan

erp_db

ods

orders

Tidak tersedia

dwd

customer

Tidak tersedia

ads

Tidak tersedia

Nama tampilan: customer_total_order_price

DDL untuk membuat 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;

Aktifkan fitur pembuatan tampilan lintas skema

  • Catatan Penggunaan

    • Secara default, fitur pembuatan tampilan lintas skema dinonaktifkan.

    • Saat membuat tampilan lintas skema, Anda harus memiliki izin developer pada skema tempat tampilan tersebut berada dan izin grup pengguna viewer atau level lebih tinggi pada tabel yang digunakan dalam skema tersebut.

      Contohnya, jika Anda ingin menggunakan akun ads_dev_user untuk membuat tampilan bernama customer_total_order_price_view di skema bernama ads, akun ads_dev_user harus diberi izin developer pada skema ads dan izin grup pengguna viewer atau level lebih tinggi pada skema ods dan dwd.

    • Jika Anda ingin menanyakan tampilan yang dibuat lintas skema, akun yang Anda gunakan harus diberi hanya izin grup pengguna viewer atau level lebih tinggi pada skema tempat tampilan tersebut berada.

      Contohnya, jika Anda ingin menggunakan akun ads_view_user untuk menanyakan tampilan bernama ads.customer_total_order_price_view, akun tersebut harus diberi hanya izin grup pengguna viewer atau level lebih tinggi pada skema bernama ads.

    • Setelah mengaktifkan fitur pembuatan tampilan lintas skema, pemilik tampilan yang dibuat adalah pengguna yang membuat tampilan tersebut. Hanya pemilik tampilan yang dapat memodifikasi atau menghapus tampilan tersebut.

      Contohnya, dalam skenario sebelumnya, pemilik tampilan ads.customer_total_order_price_view adalah akun ads_dev_user. Jika Anda ingin menghapus akun ads_dev_user dari database, eksekusi pernyataan SQL berikut untuk mentransfer kepemilikan tampilan. Pastikan akun yang menerima kepemilikan memiliki izin grup pengguna viewer atau level lebih tinggi pada skema tabel yang digunakan oleh tampilan dan izin developer pada skema tempat tampilan tersebut berada.

      -- Contoh sintaks
      call slpm_alter_view_owner('Nama Tampilan', 'ID akun Alibaba Cloud/Alamat email Alibaba Cloud/ID pengguna RAM');
      
      -- Contoh: Transfer kepemilikan tampilan ads.customer_total_order_price_view ke pengguna p4_xxxxx.
      call slpm_alter_view_owner ('ads.customer_total_order_price_view', 'p4_xxxxx');
  • Sintaks

    Untuk mengaktifkan fitur pembuatan tampilan lintas skema, eksekusi pernyataan SQL berikut sebagai superuser:

    call slpm_enable_multi_schema_view();

    Setelah pernyataan di atas dieksekusi, Anda dapat membuat tampilan lintas skema.

Nonaktifkan fitur pembuatan tampilan lintas skema

Jika Anda tidak lagi memerlukan fitur pembuatan tampilan lintas skema, eksekusi pernyataan SQL berikut untuk menonaktifkan fitur tersebut:

-- Nonaktifkan fitur pembuatan tampilan lintas skema.
call slpm_disable_multi_schema_view();
-- Transfer kepemilikan semua tampilan ke pengembang skema tempat tampilan tersebut berada.
call slpm_migrate();

Setelah pernyataan di atas dieksekusi, tampilan yang tidak dibuat lintas skema dapat ditanyakan, kemampuan berbasis SLPM dipulihkan, dan tampilan lintas skema tidak dapat ditanyakan.