All Products
Search
Document Center

Hologres:Model izin expert

Last Updated:Jun 19, 2026

Hologres kompatibel dengan PostgreSQL dan menggunakan sistem otorisasi yang sama, dikenal sebagai model otorisasi PostgreSQL standar. Topik ini menjelaskan cara memberikan dan mencabut hak istimewa pengguna di Hologres.

Memberikan hak istimewa

Setelah menghubungkan instans Hologres ke alat pengembangan, Anda dapat menjalankan pernyataan SQL untuk memberikan hak istimewa kepada pengguna berdasarkan model otorisasi PostgreSQL standar.

  1. Buat pengguna.

    Untuk mengakses Hologres dan mengembangkan data, akun harus terlebih dahulu dibuat sebagai pengguna Hologres.

    Sintaks untuk membuat pengguna adalah sebagai berikut:

    -- Buat pengguna yang memiliki hak istimewa untuk login ke instans Hologres. Jika Anda memberikan hak istimewa kepada RAM user, gunakan format yang diperlukan untuk RAM user.
    CREATE USER "ID akun Alibaba Cloud/alamat email"; 
    -- Buat pengguna dan berikan hak istimewa superuser.
    CREATE USER "ID akun Alibaba Cloud/alamat email" SUPERUSER;

    Anda dapat membuat pengguna berdasarkan contoh berikut. Untuk informasi selengkapnya tentang format akun Alibaba Cloud dan RAM user, lihat Ikhtisar akun.

    -- Buat pengguna menggunakan ID akun Alibaba Cloud.
    CREATE USER "11822780xxx";
    -- Berikan hak istimewa superuser kepada RAM user.
    CREATE USER "p4_1822780xxx" SUPERUSER; 

    Untuk informasi selengkapnya tentang pembuatan role, lihat CREATE ROLE.

  2. Berikan hak istimewa.

    Setelah membuat pengguna Hologres, Anda harus memberikan hak istimewa kepada mereka. Model otorisasi PostgreSQL standar memungkinkan Anda mengontrol hak istimewa pengguna pada tingkat database, tabel, view, dan kolom. Tabel berikut menjelaskan operasi otorisasi umum di Hologres.

    Catatan

    Model otorisasi PostgreSQL standar hanya dapat memberikan hak istimewa pada objek yang sudah ada. Hak istimewa tersebut tidak berlaku untuk objek yang dibuat setelah pemberian hak. Misalnya, jika pengguna A memberikan hak istimewa SELECT kepada pengguna B pada semua tabel di public schema, lalu membuat tabel baru, pengguna B tidak memiliki hak istimewa SELECT pada tabel baru tersebut. Pengguna A harus secara eksplisit memberikan hak istimewa tersebut pada tabel baru.

    Deskripsi

    Contoh sintaks

    Diperlukan

    Buat pengguna dengan hak istimewa untuk login ke instans Hologres

    CREATE USER "ID akun Alibaba Cloud/alamat email";

    Diperlukan

    Buat pengguna dan berikan hak istimewa superuser

    CREATE USER "ID akun Alibaba Cloud/alamat email" SUPERUSER ;

    Opsional

    Berikan hak istimewa CREATE pada schema

    GRANT CREATE ON SCHEMA schema_name  TO "Alibaba Cloud account/email address";

    Opsional

    Berikan hak istimewa USAGE pada schema

    GRANT USAGE ON SCHEMA schema_name  TO "ID akun Alibaba Cloud/alamat email";

    Diperlukan

    Catatan

    Pengguna harus memiliki hak istimewa USAGE pada schema untuk melakukan kueri terhadap tabelnya.

    Berikan hak istimewa SELECT, INSERT, dan UPDATE kepada semua pengguna pada semua tabel di public schema

    GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public to PUBLIC;

    Opsional

    Berikan hak istimewa SELECT kepada pengguna pada tabel

    GRANT SELECT ON TABLE <tablename> TO "ID akun Alibaba Cloud/alamat email";

    Opsional

    Berikan hak istimewa SELECT kepada pengguna pada tabel dengan opsi grant

    GRANT SELECT ON TABLE <tablename> TO "ID akun Alibaba Cloud/alamat email" WITH GRANT OPTION;

    Opsional

    Berikan hak istimewa SELECT kepada pengguna pada semua tabel di public schema

    GRANT SELECT ON ALL TABLES IN SCHEMA public TO "ID akun Alibaba Cloud/alamat email";

    Opsional

    Berikan hak istimewa SELECT kepada semua pengguna pada tabel mendatang yang dibuat oleh role saat ini di schema public.

    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;

    Opsional

    Ubah pengguna biasa menjadi superuser

    ALTER USER "ID akun Alibaba Cloud/alamat email" SUPERUSER;

    Opsional

    Ubah superuser menjadi pengguna biasa

    ALTER USER "ID akun Alibaba Cloud/alamat email" NOSUPERUSER;

    Opsional

    Alihkan kepemilikan tabel ke pengguna lain

    ALTER TABLE <tablename> OWNER TO "ID akun Alibaba Cloud/alamat email";

    Opsional

    Buat role tanpa hak istimewa login

    CREATE ROLE "ID akun Alibaba Cloud/alamat email";

    Opsional

    Berikan role kepada pengguna

    GRANT <rolename> TO "ID akun Alibaba Cloud/alamat email" ;

    Opsional

    Berikan hak istimewa SELECT kepada pengguna pada kolom tertentu dari tabel

    GRANT SELECT (<column1>,<column2>,<column3>,...) ON TABLE <tablename> TO "ID akun Alibaba Cloud/alamat email" ;

    Opsional

    Berikan hak istimewa SELECT kepada pengguna pada view

    Catatan
    • Dalam model otorisasi PostgreSQL standar, Anda harus memberikan hak istimewa SELECT pada view untuk mengaksesnya.

    • Dalam simple permission model (SPM)/schema-level permission model (SLPM), Anda harus menjadi anggota kelompok pengguna viewer atau kelompok pengguna dengan hak istimewa lebih tinggi untuk mengakses view.

    -- Berikan hak istimewa SELECT kepada pengguna pada view menggunakan model otorisasi PostgreSQL standar. 
    GRANT SELECT ON <viewname> TO "ID akun Alibaba Cloud/alamat email" ;

    Opsional

    Dalam model otorisasi PostgreSQL standar, Anda dapat menjalankan pernyataan berikut untuk memberikan hak istimewa SELECT pada tabel kepada pengguna baru.

    CREATE USER "ID akun Alibaba Cloud/alamat email";
    GRANT USAGE ON SCHEMA <schema_name>  TO "ID akun Alibaba Cloud/alamat email";
    GRANT SELECT ON TABLE <tablename> TO "ID akun Alibaba Cloud/alamat email";

    Pernyataan CREATE ROLE digunakan untuk membuat role tanpa hak istimewa untuk login ke instans Hologres, seperti kelompok pengguna atau role virtual yang mewakili jenis pengguna tertentu. Untuk informasi selengkapnya tentang pemberian hak istimewa, lihat GRANT.

  3. Hapus tabel.

    Hanya superuser atau pemilik tabel yang dapat menghapus tabel. Untuk memberikan hak istimewa menghapus tabel kepada pengguna, gunakan salah satu metode berikut:

    • Alihkan kepemilikan tabel ke pengguna baru.

      ALTER TABLE TABLENAME OWNER TO "ID akun Alibaba Cloud/alamat email";
    • Berikan hak istimewa superuser kepada pengguna baru.

      ALTER USER "ID akun Alibaba Cloud/alamat email" SUPERUSER;
    • Tambahkan beberapa pengguna ke kelompok pengguna dan alihkan kepemilikan tabel ke kelompok pengguna tersebut.

      CREATE USER "ID akun Alibaba Cloud/alamat email";
      CREATE ROLE <rolename>;
      GRANT <rolename> TO "ID akun Alibaba Cloud/alamat email";
      ALTER TABLE <tablename> OWNER TO <rolename>;

Hak istimewa default untuk tabel mendatang

Secara default, model otorisasi PostgreSQL standar tidak memberikan hak istimewa pada tabel mendatang. Untuk melakukannya, Anda harus menggunakan pernyataan ALTER DEFAULT PRIVILEGES.

Catatan
  • Pernyataan ini tidak memengaruhi objek logis yang sudah ada.

  • Pernyataan ini hanya dapat mengatur hak istimewa default untuk tabel, schema, fungsi, sequence, atau tipe.

  1. Berikan hak istimewa.

    • Setelah Anda mengonfigurasi hak istimewa default, tabel yang dibuat pengguna dalam schema tertentu dapat dikueri oleh pengguna tertentu atau semua pengguna. Contoh pernyataan berikut menunjukkan cara memberikan hak istimewa default.

      • Setelah menjalankan pernyataan ini, semua pengguna dapat mengkueri tabel mendatang yang dibuat oleh pengguna p4_id1 di public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;
      • Setelah menjalankan pernyataan ini, pengguna p4_id2 dapat mengkueri tabel mendatang yang dibuat oleh pengguna p4_id1 di public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO "p4_id2";
      • Setelah menjalankan pernyataan ini, semua pengguna dapat mengkueri tabel mendatang yang dibuat oleh pengguna p4_id1 di test schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test GRANT SELECT ON TABLES TO PUBLIC;
    • Untuk mencabut hak istimewa default, jalankan pernyataan SQL berikut.

      • Cabut dari semua pengguna hak istimewa SELECT default pada tabel mendatang yang dibuat oleh pengguna p4_id1 di public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public REVOKE SELECT ON TABLES FROM PUBLIC;
      • Cabut dari pengguna p4_id2 hak istimewa SELECT default pada tabel mendatang yang dibuat oleh pengguna p4_id1 di public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public REVOKE SELECT ON TABLES FROM "p4_id2";
      • Cabut dari semua pengguna hak istimewa SELECT default pada tabel mendatang yang dibuat oleh pengguna p4_id1 di test schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test REVOKE SELECT ON TABLES FROM PUBLIC;
  2. Verifikasi bahwa hak istimewa default telah ditetapkan.

    • Di client psql, jalankan perintah \ddp untuk memverifikasi bahwa pernyataan ALTER DEFAULT PRIVILEGES berhasil.

    • Jalankan pernyataan SQL berikut di Hologres untuk mengkueri hasilnya secara langsung.

      SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS "Owner",
        n.nspname AS "Schema",
        CASE d.defaclobjtype WHEN 'r' THEN 'table' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'function' WHEN 'T' THEN 'type' WHEN 'n' THEN 'schema' END AS "Type",
        pg_catalog.array_to_string(d.defaclacl, E'\n') AS "Access privileges"
      FROM pg_catalog.pg_default_acl d
           LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.defaclnamespace
      ORDER BY 1, 2, 3;

    Ketika tabel baru dibuat, Hologres mencocokkan pengguna saat ini dan schema terhadap katalog sistem pg_catalog.pg_default_acl. Jika aturan ALTER DEFAULT PRIVILEGES yang cocok ditemukan, aturan tersebut diterapkan pada tabel baru. Pengguna saat ini ditentukan sebagai berikut:

    • Jika role saat ini adalah pengguna, pengguna tersebut digunakan untuk pencocokan saat tabel dibuat.

    • Jika pengguna menjalankan pernyataan SET SESSION ROLE GROUP1; sebelum membuat tabel, role saat ini berubah menjadi GROUP1. Dalam hal ini, GROUP1 digunakan untuk pencocokan.

    Aturan pencocokan hanya dipicu ketika tabel dibuat. Jika Anda menjalankan pernyataan ALTER TABLE SET OWNER TO untuk mengubah pemilik tabel setelah tabel dibuat, aturan pencocokan tidak dipicu.

Mencabut hak istimewa

Untuk mencabut hak istimewa dari pengguna, jalankan pernyataan REVOKE. Untuk informasi selengkapnya tentang pencabutan hak istimewa, lihat REVOKE.

Sebelum mencabut hak istimewa schema, periksa apakah akun tersebut memiliki pekerjaan terjadwal apa pun di DataWorks. Jika iya, tetapkan ulang pekerjaan tersebut ke akun aktif yang berwenang melalui Operation Center DataWorks terlebih dahulu. Jika tidak, pekerjaan tersebut akan gagal pada eksekusi berikutnya dengan pesan permission denied for schema.

REVOKE SELECT ON TABLE tablename FROM "ID akun Alibaba Cloud/alamat email" ; -- Jika Anda mencabut hak istimewa dari RAM user, gunakan format yang diperlukan untuk RAM user.

Hak istimewa katalog sistem

Mulai dari Hologres V3.0, ketika pengguna terhubung ke database, mereka dapat melihat informasi tentang semua schema dan tabel di instans dengan mengkueri katalog sistem pg_class, pg_attribute, dan pg_namespace. Hal ini terutama berlaku saat terhubung dengan alat BI atau pengembangan, yang secara otomatis mengambil daftar schema, tabel, dan kolom dari katalog sistem ini. Ini memungkinkan pengguna mana pun mengambil metadata, meskipun tanpa hak akses ke data aktualnya. Untuk mengatasi hal ini, Hologres versi V3.0.23 dan yang lebih baru mendukung kontrol akses tingkat baris (RLS) pada ketiga katalog sistem tersebut. Fitur ini memastikan hanya pengguna yang berwenang yang dapat melihat metadata yang sesuai. Anda dapat mengaktifkan RLS dengan mengatur parameter GUC berikut:

  • Parameter GUC ini hanya mengontrol katalog sistem pg_class, pg_attribute, dan pg_namespace.

  • Superuser harus menjalankan pernyataan ini sekali untuk setiap database.

  • Setelah diatur, hanya superuser, pemilik objek, atau pengguna dengan hak istimewa apa pun pada objek (tabel atau schema) yang dapat melihat metadata yang sesuai. Pengguna lain tidak dapat melihat metadata tersebut.

-- Diatur oleh superuser.
ALTER DATABASE <database_name> SET hg_experimental_enable_catalog_rls = on;
Catatan

Untuk informasi selengkapnya tentang katalog sistem, lihat Katalog Sistem.

Menampilkan hak istimewa

Anda dapat menjalankan pernyataan SQL berikut untuk melihat role dan hak istimewa pengguna.

SELECT ROLNAME FROM pg_roles;
SELECT user_display_name(ROLNAME) FROM pg_roles;

Hapus pengguna

Jika instans Anda terhubung ke alat pengembangan, Anda dapat menjalankan pernyataan SQL untuk menghapus pengguna. Prosedurnya bervariasi tergantung pada jenis pengguna.

  • Hapus pengguna biasa

    Untuk menghapus pengguna biasa yang belum membuat objek apa pun seperti tabel, view, atau ekstensi, Anda dapat menjalankan pernyataan berikut atau menghapus pengguna di konsol HoloWeb.

    drop user "ID akun Alibaba Cloud/alamat email";
  • Hapus administrator, seperti superuser

    Untuk menghapus administrator, seperti superuser, yang telah membuat objek dan menjadi pemiliknya, Anda harus terlebih dahulu mengalihkan kepemilikan objek tersebut. Hal ini sangat penting dalam model otorisasi PostgreSQL standar. Mencoba menghapus pengguna secara langsung akan menghasilkan error. Jalankan pernyataan berikut:

    -- Alihkan objek yang dimiliki oleh Akun A ke Akun B.
    reassign owned by "ID akun Alibaba Cloud A" to "ID akun Alibaba Cloud B";     
    -- Hapus Akun A.
    drop user "ID akun Alibaba Cloud A";

Anda dapat menghapus RAM user dari instans dengan salah satu metode berikut:

DROP USER "ID akun Alibaba Cloud/alamat email";
Penting

Setelah RAM user dihapus, mereka tidak dapat lagi terhubung ke instans atau mengakses objeknya. Lakukan dengan hati-hati.

PostgreSQL memiliki model hak istimewa yang ketat. Untuk praktik terbaik yang membantu Anda memilih pendekatan berdasarkan kebutuhan bisnis, lihat Otorisasi berdasarkan model izin PostgreSQL standar.