全部产品
Search
文档中心

Hologres:Gunakan SPM

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menggunakan model izin sederhana (SPM) di Hologres.

Gunakan SPM untuk mengotorisasi pengguna

Saat menggunakan SPM untuk memberikan otorisasi kepada pengguna instance di Hologres, Anda dapat memilih salah satu metode berikut:

  • Menjalankan Pernyataan SQL untuk Memberikan Otorisasi kepada Pengguna

    Setelah menghubungkan instance Hologres ke alat pengembangan, Anda dapat menjalankan pernyataan SQL untuk memberikan otorisasi kepada pengguna menggunakan SPM. Dengan cara ini, pengguna diberikan izin yang diperlukan pada instance tersebut. Untuk memberikan otorisasi kepada pengguna menggunakan SPM, ikuti langkah-langkah berikut:

  1. Aktifkan Pemanggilan Fungsi.

    Sebelum mengaktifkan SPM, jalankan pernyataan berikut untuk mengaktifkan pemanggilan fungsi:

    create extension spm;
  2. Aktifkan SPM.

    Secara default, SPM dinonaktifkan. Anda dapat menjalankan pernyataan berikut untuk mengaktifkan SPM untuk database sebagai superuser. Untuk informasi lebih lanjut tentang fungsi spm_enable, lihat spm_enable.

    call spm_enable ();  // Aktifkan SPM untuk database saat ini.
    Catatan

    Setelah mengaktifkan SPM untuk database, pengguna dalam grup pengguna developer akan diberikan izin pada tabel dan objek mirip tabel di semua skema database.

  3. Opsional: Beralih dari Model Otorisasi PostgreSQL Standar ke SPM untuk Objek yang Ada.

    Jika database menggunakan model otorisasi PostgreSQL standar dan berisi objek seperti tabel, tampilan, dan tabel asing, Anda harus mentransfer kepemilikan objek-objek tersebut kepada pengembang yang ditentukan dalam SPM. Jika tidak, pengguna tidak akan memiliki izin untuk mengelola objek, dan bisnis mungkin terpengaruh. Jalankan pernyataan berikut untuk mentransfer kepemilikan objek:

    call spm_migrate(); // Transfer kepemilikan objek yang ada di database kepada pengembang yang ditentukan dalam SPM.

    Jika database tidak berisi objek, lewati langkah ini.

    Catatan

    Saat mengaktifkan SPM untuk database, pastikan tidak ada pernyataan SQL yang sedang dijalankan di database tersebut. Jika tidak, Anda mungkin gagal mengaktifkan SPM, dan bisnis mungkin terpengaruh.

    Fungsi spm_migrate mungkin mentransfer kepemilikan sejumlah besar objek sekaligus. Hal ini mungkin dibatasi oleh PostgreSQL. Jumlah objek yang dapat ditransfer kepemilikannya sekaligus dengan memanggil fungsi spm_migrate tidak lebih dari nilai parameter max_locks_per_transaction. Akibatnya, Anda mungkin perlu memanggil fungsi spm_migrate beberapa kali hingga kepemilikan semua objek ditransfer. Untuk informasi lebih lanjut tentang fungsi spm_migrate, lihat spm_migrate.

  4. Buat Pengguna.

    Sebelum memberikan otorisasi kepada pengguna, buat pengguna di instance Hologres. Jika Anda perlu memberikan otorisasi kepada pengguna yang sudah ada di instance, lewati langkah ini.

    • Akun Alibaba Cloud atau Pengguna RAM:

      call spm_create_user ('UID akun Alibaba Cloud/Alamat Email Alibaba/RAM user'); // Jika Anda membuat pengguna menggunakan alamat Email Alibaba, Anda harus menambahkan tanda kutip ganda (").
      call spm_create_user ('UID akun Alibaba Cloud/Alamat Email Alibaba/RAM user', '<dbname>_[admin|developer|writer|viewer]'); // Tambahkan pengguna ke grup pengguna yang sesuai saat Anda membuat pengguna.

      Parameter dbname dalam pernyataan di atas menunjukkan nama database pada instance Hologres saat ini.

      Sebagai contoh, Anda dapat menambahkan pengguna RAM xxx.onaliyun.com ke grup pengguna developer dari database testdb.

      call spm_create_user ('xxx.onaliyun.com', 'testdb_developer');
    • Pengguna Kustom:

      create user "BASIC$<user_name>" with password '<password>';
    Catatan
    • Saat memanggil fungsi spm_create_user untuk menambahkan pengguna RAM ke instance Hologres, awali UID pengguna RAM dengan p4_ dan tambahkan tanda kutip ganda ("), seperti "p4_uid".

    • Jika menggunakan akun kustom, nama pengguna tidak boleh diakhiri dengan admin, developer, writer, viewer, atau all_users.

  5. Tambahkan Pengguna ke Grup Pengguna.

    Setelah membuat pengguna di instance Hologres, tambahkan pengguna ke grup pengguna di database untuk memberikan otorisasi kepada pengguna. Setelah memberikan otorisasi kepada pengguna RAM, Anda dapat menggunakan alat pengembangan untuk terhubung ke database saat ini dan mengembangkan database sebagai pengguna RAM. Jika Anda menentukan grup pengguna untuk pengguna saat pembuatan, lewati langkah ini. Untuk informasi lebih lanjut tentang fungsi spm_grant, lihat spm_grant.

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

    
    call spm_grant('{dbname}_[admin|developer|writer|viewer]', 'UID akun Alibaba Cloud/Alamat Email Alibaba/RAM user'); // Tambahkan pengguna ke grup pengguna.

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

    // Tambahkan pengguna ke grup <db>_admin dari database. 
    call spm_grant('mydb_admin', 'p4_564306222995xxx'); // Tambahkan pengguna RAM dengan UID 564306222995xxx ke grup mydb_admin. 
    call spm_grant('mydb_admin', '197006222995xxx'); // Tambahkan pengguna dengan UID akun Alibaba Cloud 197006222995xxx ke grup mydb_admin. 
    call spm_grant('mydb_admin', 'ALIYUN$xxx'); // Tambahkan pengguna dengan alamat Email Alibaba xxx@aliyun.com ke grup mydb_admin. 
    
    // Tambahkan pengguna ke grup <db>_developer dari database. 
    call spm_grant('mydb_developer', 'p4_564306222995xxx'); // Tambahkan pengguna RAM dengan UID 564306222995xxx ke grup mydb_developer. 
    call spm_grant('mydb_developer', '197006222995xxx'); // Tambahkan pengguna dengan UID akun Alibaba Cloud 197006222995xxx ke grup mydb_developer. 
    call spm_grant('mydb_developer', 'RAM$mainaccount:subuser');// Tambahkan pengguna RAM bernama subuser dari akun Alibaba Cloud bernama mainaccount ke grup mydb_developer. 
    
    // Tambahkan pengguna ke grup <db>_viewer dari database. 
    call spm_grant('"MYDB_viewer"', 'p4_564306222995xxx'); // Tambahkan pengguna RAM dengan UID 564306222995xxx ke grup MYDB_viewer. 
    call spm_grant('"MYDB_viewer"', '197006222995xxx'); // Tambahkan pengguna dengan UID akun Alibaba Cloud 197006222995xxx ke grup MYDB_viewer. 
    call spm_grant('mydb_viewer', '"xxx@aliyun.com"'); // Tambahkan pengguna dengan alamat Email Alibaba xxx@aliyun.com ke grup mydb_viewer.

Hapus pengguna dari grup pengguna

Jika Anda perlu menghapus pengguna dari grup pengguna database tertentu di Hologres, Anda dapat menggunakan metode berikut berdasarkan SPM:

  • Jalankan Pernyataan SQL untuk Menghapus Pengguna dari Grup Pengguna.

    Anda dapat menjalankan pernyataan berikut untuk menghapus pengguna dari grup pengguna database. Untuk informasi lebih lanjut tentang fungsi spm_revoke, lihat spm_revoke.

    call spm_revoke('<dbname>_[admin|developer|writer|viewer]', 'UID akun Alibaba Cloud/Alamat Email Alibaba/RAM user'); // Hapus pengguna dari grup pengguna. 
    
    // Contoh:
    // Hapus pengguna dari grup <db>_admin dari database. 
    call spm_revoke ('dbname_admin', 'p4_564306222995xxx');// Hapus pengguna RAM dengan UID 564306222995xxx dari grup admin database yang ditentukan. 
    call spm_revoke ('dbname_admin', '197006222995xxx');// Hapus pengguna dengan UID akun Alibaba Cloud 197006222995xxx dari grup admin database yang ditentukan. 
    call spm_revoke('dbname_admin', 'xxx@aliyun.com');// Hapus pengguna dengan alamat Email Alibaba xxx@aliyun.com dari grup admin database yang ditentukan. 
    
    // Hapus pengguna dari grup <db>_developer dari database. 
    call spm_revoke('mydb_developer', 'RAM$mainaccount:subuser'); // Hapus pengguna RAM bernama subuser dari akun Alibaba Cloud bernama mainaccount dari grup mydb_developer. 
    call spm_revoke('mydb_developer', 'p4_564306222995xxx');// Hapus pengguna RAM dengan UID 564306222995xxx dari grup mydb_developer. 
    
    // Hapus pengguna dari grup <db>_viewer dari database. 
    call spm_revoke('"MYDB_viewer"', 'p4_564306222995xxx'); // Hapus pengguna RAM dengan UID 564306222995xxx dari grup MYDB_viewer.

Hapus pengguna dari instance Hologres

Anda dapat menjalankan pernyataan berikut untuk menghapus pengguna dari instance Hologres:

Penting

Setelah pengguna dihapus dari instance Hologres, pengguna tidak memiliki izin pada instance tersebut. Lakukan dengan hati-hati.

DROP ROLE "UID akun Alibaba Cloud/Alamat Email Alibaba/RAM user UID"; // Hapus pengguna dari instance Hologres.

(Opsional) Beralih dari model otorisasi PostgreSQL standar ke SPM untuk objek yang ada

Jika database menggunakan model otorisasi PostgreSQL standar dan database tersebut berisi objek seperti tabel, tampilan, dan tabel asing, Anda dapat mengaktifkan SPM untuk manajemen izin yang lebih baik. Untuk memanggil fungsi spm_migrate guna mentransfer kepemilikan objek yang ada ke SPM, jalankan pernyataan berikut:

call spm_migrate();  // Transfer kepemilikan objek yang ada di database kepada pengembang yang ditentukan dalam SPM.
Catatan

Saat mengaktifkan SPM untuk database, pastikan tidak ada pernyataan SQL yang sedang dijalankan di database tersebut. Jika tidak, Anda mungkin gagal mengaktifkan SPM, dan bisnis mungkin terpengaruh.

Fungsi spm_migrate mungkin mentransfer kepemilikan sejumlah besar objek sekaligus. Namun, jumlah objek yang dapat ditransfer kepemilikannya sekaligus dengan memanggil fungsi spm_migrate tidak lebih dari nilai parameter max_locks_per_transaction. Akibatnya, Anda mungkin perlu memanggil fungsi spm_migrate beberapa kali hingga kepemilikan semua objek ditransfer.

Nonaktifkan SPM

  1. Nonaktifkan SPM.

    Superuser dapat menjalankan pernyataan berikut untuk menonaktifkan SPM untuk database. Untuk informasi lebih lanjut tentang fungsi spm_disable, lihat spm_disable.

    call spm_disable();

    Jika superuser menonaktifkan SPM untuk database, grup pengguna database tidak dihapus. Untuk informasi lebih lanjut tentang izin pengguna dalam grup pengguna, lihat Fungsi untuk Mengelola SPM.

  2. Hapus Grup Pengguna Database.

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

    Catatan

    Dalam kebanyakan kasus, kami merekomendasikan agar Anda mempertahankan grup pengguna untuk memudahkan manajemen pengguna.

    • Kasus 1: Hapus Grup Pengguna dari Database yang Ada

      Untuk menghapus grup pengguna tetapi mempertahankan database, jalankan pernyataan berikut sebagai superuser. Untuk informasi lebih lanjut tentang fungsi spm_cleanup, lihat spm_cleanup.

      call spm_cleanup('{dbname}');
      Catatan

      Saat memanggil fungsi spm_cleanup, pastikan tidak ada pernyataan SQL yang sedang dijalankan di database. Jika tidak, fungsi tersebut mungkin gagal, dan bisnis mungkin terpengaruh.

      Fungsi spm_cleanup mungkin mentransfer kepemilikan sejumlah besar objek bisnis sekaligus. Namun, jumlah objek yang dapat ditransfer kepemilikannya sekaligus dengan memanggil fungsi spm_cleanup tidak lebih dari nilai parameter max_locks_per_transaction. Akibatnya, Anda mungkin perlu memanggil fungsi spm_cleanup beberapa kali hingga kepemilikan semua objek ditransfer dan semua grup pengguna database dihapus.

    • Kasus 2: Hapus Grup Pengguna dari Database yang Dihapus

      Untuk menghapus grup pengguna dari database yang dihapus, jalankan pernyataan berikut di database lain seperti postgres sebagai superuser:

      call spm_cleanup('mydb');

Saat menonaktifkan SPM, perhatikan hal-hal berikut:

  • Hanya superuser yang dapat menonaktifkan SPM untuk database.

  • Setelah SPM dinonaktifkan, grup PUBLIC diberikan izin USAGE dan CREATE pada skema public database.

  • Setelah SPM dinonaktifkan, grup PUBLIC diberikan izin CONNECT dan TEMPORARY pada database.

  • Setelah SPM dinonaktifkan, grup PUBLIC diberikan izin EXECUTE pada fungsi dan prosedur database.

  • Setelah SPM dinonaktifkan, grup PUBLIC diberikan izin USAGE pada bahasa dan tipe data (termasuk domain) database.

  • Setelah SPM dinonaktifkan, grup PUBLIC tidak memiliki izin pada objek selain yang disebutkan di atas. Sebagai contoh, grup PUBLIC tidak memiliki izin pada tabel, tampilan, tampilan material, kolom tabel, urutan, pembungkus data asing, server asing, atau skema (kecuali skema public).

  • Setelah SPM dinonaktifkan, grup <db>_admin, <db>_developer, <db>_writer, dan <db>_viewer memiliki izin berikut:

    • <db>_admin: Mempertahankan izin yang diperoleh pada objek yang ada dan tidak memiliki izin pada objek baru.

    • <db>_developer: Mempertahankan izin yang diperoleh pada objek yang ada dan tidak memiliki izin pada objek baru.

    • <db>_writer: Mempertahankan izin yang diperoleh pada objek yang ada dan tidak memiliki izin pada objek baru.

    • <db>_viewer: Mempertahankan izin yang diperoleh pada objek yang ada dan tidak memiliki izin pada objek baru.

Aktifkan SPM lagi

Anda telah mengaktifkan SPM untuk database Anda tetapi beralih ke model otorisasi PostgreSQL standar untuk objek yang ada. Jika Anda perlu mengaktifkan SPM lagi, jalankan pernyataan berikut:

call spm_enable (); // Aktifkan SPM untuk database saat ini. 
call spm_migrate(); // Transfer kepemilikan objek yang ada di database kepada pengembang yang ditentukan dalam SPM.
Catatan

Saat mengaktifkan SPM untuk database, pastikan tidak ada pernyataan SQL yang sedang dijalankan di database tersebut. Jika tidak, Anda mungkin gagal mengaktifkan SPM, dan bisnis mungkin terpengaruh.

Fungsi spm_migrate mungkin mentransfer kepemilikan sejumlah besar objek sekaligus. Namun, jumlah objek yang dapat ditransfer kepemilikannya sekaligus dengan memanggil fungsi spm_migrate tidak lebih dari nilai parameter max_locks_per_transaction. Akibatnya, Anda mungkin perlu memanggil fungsi spm_migrate beberapa kali hingga kepemilikan semua objek ditransfer.