All Products
Search
Document Center

Hologres:Model otorisasi PostgreSQL standar

Last Updated:Feb 05, 2026

Hologres kompatibel dengan PostgreSQL dan menggunakan sistem otorisasi yang sama seperti pernyataan PostgreSQL standar, juga dikenal sebagai model otorisasi PostgreSQL standar. Topik ini menjelaskan cara menggunakan model ini untuk memberikan dan mencabut izin pengguna di Hologres.

Berikan izin dengan model otorisasi PostgreSQL standar

Setelah terhubung ke instans Hologres menggunakan tool pengembangan, Anda dapat menggunakan pernyataan SQL untuk memberikan izin berdasarkan model otorisasi PostgreSQL standar, sehingga memberikan izin yang diperlukan kepada pengguna untuk instans tersebut.

  1. Buat Pengguna

    Akun harus dibuat sebagai pengguna Hologres sebelum dapat mengakses Hologres untuk pengembangan.

    Sintaks untuk membuat pengguna adalah sebagai berikut:

    -- Buat pengguna dengan izin untuk login ke instans Hologres. Jika Anda memberikan izin kepada Pengguna Resource Access Management (RAM), gunakan format Pengguna RAM untuk akun tersebut.
    CREATE USER "ID akun Alibaba Cloud/email"; 
    -- Buat pengguna dan berikan izin Superuser.
    CREATE USER "ID akun Alibaba Cloud/email" SUPERUSER;

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

    -- Buat pengguna dengan ID akun Alibaba Cloud.
    CREATE USER "11822780xxx";
    -- Berikan izin Superuser kepada Pengguna RAM.
    CREATE USER "p4_1822780xxx" SUPERUSER; 

    Untuk informasi lebih lanjut tentang pembuatan role, lihat CREATE ROLE.

  2. Berikan Izin

    Setelah membuat akun sebagai pengguna Hologres, Anda harus memberikan izin kepada pengguna tersebut agar dapat menggunakan Hologres dalam cakupan izin tersebut. Model otorisasi PostgreSQL standar memungkinkan Anda mengontrol izin pada tingkat database, tabel, view, dan kolom. Tabel berikut menjelaskan operasi otorisasi umum di Hologres.

    Catatan

    Model otorisasi PostgreSQL standar hanya memberikan izin pada objek instans yang sudah ada. Model ini tidak berlaku untuk objek yang dibuat setelah izin diberikan. Misalnya, jika pengguna A memberikan izin kepada pengguna B untuk melihat semua tabel di public schema, dan pengguna A kemudian membuat tabel baru, pengguna B tidak memiliki izin untuk melihat tabel baru tersebut. Anda harus memberikan izin tersebut lagi.

    Deskripsi izin

    Contoh sintaks

    Diperlukan

    Buat pengguna dengan izin untuk login ke instans Hologres

    CREATE USER "Alibaba Cloud account/email";

    Ya

    Buat pengguna dan berikan izin Superuser

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

    Opsional

    Berikan izin untuk membuat tabel dalam sebuah schema

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

    Opsional

    Berikan izin USAGE pada sebuah schema

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

    Diperlukan

    Catatan

    Anda harus memberikan izin USAGE pada sebuah schema sebelum dapat memberikan izin kueri pada tabel-tabelnya.

    Berikan kepada semua pengguna izin untuk melihat, menulis, dan mengubah semua tabel di public schema

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

    Opsional

    Berikan pengguna izin SELECT pada tabel

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

    Opsional

    Berikan izin SELECT kepada pengguna pada sebuah tabel dan izinkan pengguna tersebut memberikan izin ini kepada pengguna lain

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

    Opsional

    Berikan pengguna izin SELECT pada semua tabel di public schema

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

    Opsional

    Izinkan pemberi otorisasi saat ini agar tabel-tabel mendatang yang dibuat di schema public dapat dibaca oleh semua orang.

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

    Opsional

    Ubah pengguna biasa menjadi Superuser

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

    Opsional

    Ubah Superuser menjadi pengguna biasa

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

    Opsi

    Berikan izin Owner pada sebuah tabel kepada pengguna lain

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

    Opsional

    Buat peran yang tidak memiliki izin untuk masuk ke instance Hologres

    CREATE ROLE "Alibaba Cloud account/mailbox";

    Opsi

    Berikan izin role tertentu kepada pengguna

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

    Opsional

    Berikan izin kueri kepada pengguna pada kolom-kolom tertentu dari sebuah tabel

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

    Opsional

    Berikan izin kueri kepada pengguna pada sebuah view

    Catatan
    • Untuk mengakses view dengan model otorisasi PostgreSQL standar, Anda harus memberikan izin kueri pada view tersebut.

    • Untuk mengakses view dengan model izin SPM/SLPM, pengguna harus memiliki izin dari kelompok pengguna viewer atau kelompok pengguna tingkat lebih tinggi.

    -- Berikan izin kueri kepada pengguna pada sebuah view dengan model otorisasi PostgreSQL standar.
    GRANT SELECT ON <viewname> TO "ID akun Alibaba Cloud/email" ;

    Opsional

    Dalam model standar, Anda dapat menggunakan contoh berikut untuk memberikan izin kueri kepada pengguna baru pada sebuah tabel.

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

    CREATE ROLE membuat role yang tidak memiliki izin untuk login ke instans Hologres. Contohnya termasuk kelompok pengguna yang mewakili kelas pengguna tertentu atau role virtual. Untuk informasi lebih lanjut tentang pemberian izin, lihat GRANT.

  3. Hapus Tabel

    Hanya Superuser atau Owner tabel yang dapat menghapus tabel. Anda dapat menggunakan salah satu metode berikut untuk memberikan izin menghapus tabel kepada satu atau beberapa pengguna:

    • Ganti Owner tabel dengan pengguna baru.

      ALTER TABLE TABLENAME OWNER TO "ID akun Alibaba Cloud/email";
    • Berikan izin Superuser kepada pengguna baru.

      ALTER USER "ID akun Alibaba Cloud/email" SUPERUSER;
    • Tambahkan beberapa pengguna ke kelompok pengguna dan berikan izin Owner pada tabel tersebut kepada kelompok tersebut.

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

Berikan izin pada tabel mendatang

Model otorisasi PostgreSQL standar tidak memberikan izin pada tabel mendatang. Anda harus menggunakan pernyataan ALTER DEFAULT PRIVILEGES untuk memberikan izin pada tabel mendatang. Prosedurnya adalah sebagai berikut:

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

  • Perintah ini hanya dapat mengatur izin default untuk TABLE, SCHEMA, FUNCTION, SEQUENCE, atau TYPE.

  1. Berikan Izin

    • Setelah memberikan izin default, tabel mendatang yang dibuat oleh pengguna tertentu dalam schema tertentu dapat dikueri oleh pengguna tertentu atau semua pengguna. Berikut adalah contoh pernyataannya.

      • Setelah memberikan izin, tabel mendatang yang dibuat oleh pengguna p4_id1 di public schema dapat dikueri oleh semua pengguna.

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

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

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test GRANT SELECT ON TABLES TO PUBLIC;
    • Untuk mencabut izin default yang telah ditetapkan, gunakan pernyataan SQL berikut.

      • Cabut izin default yang memungkinkan semua pengguna mengkueri 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 izin default yang memungkinkan pengguna p4_id2 mengkueri 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 izin default yang memungkinkan semua pengguna mengkueri 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 Izin Default Telah Ditentukan

    • Gunakan perintah \ddp di client psql untuk memeriksa apakah ALTER DEFAULT PRIVILEGES berhasil.

    • Gunakan perintah SQL berikut untuk mengkueri langsung di Hologres.

      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 menggunakan pengguna saat ini dan schema untuk menemukan item yang cocok di tabel sistem pg_catalog.pg_default_acl. Jika item ALTER DEFAULT PRIVILEGES yang cocok ditemukan, Hologres menambahkan aturan dari item yang cocok tersebut untuk pengguna tersebut. Pengguna saat ini ditentukan sebagai berikut:

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

    • Jika pengguna bernama User mengeksekusi pernyataan SET SESSION ROLE GROUP1; sebelum membuat tabel, pengguna saat ini menjadi GROUP1. GROUP1 kemudian digunakan untuk pencocokan saat tabel dibuat.

    Aturan pencocokan hanya dieksekusi saat tabel dibuat. Jika Anda mengeksekusi pernyataan ALTER TABLE SET OWNER TO untuk mengubah Owner tabel setelah tabel dibuat, aturan pencocokan yang sesuai tidak dipicu.

Mencabut otorisasi dalam Mode Expert

Contoh berikut menunjukkan cara menggunakan pernyataan REVOKE untuk mencabut izin pengguna. Untuk informasi lebih lanjut tentang pencabutan izin, lihat REVOKE.

-- Jika Anda mencabut izin dari Pengguna RAM, gunakan format Pengguna RAM untuk akun tersebut.
REVOKE SELECT ON TABLE tablename FROM "ID akun Alibaba Cloud/email" ; 

Izin tabel sistem

Mulai dari Hologres V3.0, ketika pengguna terhubung ke database di Postgres, pengguna dapat melihat informasi tentang semua schema dan tabel di instans tersebut melalui tabel sistem pg_class, pg_attribute, dan pg_namespace. Hal ini terutama berlaku saat terhubung dengan tool BI atau pengembangan. Tool-tool tersebut secara otomatis mengambil daftar schema, daftar tabel, dan informasi kolom tabel dari ketiga tabel sistem ini. Pengguna dapat memperoleh informasi metadata ini dari tabel sistem terlepas dari apakah mereka memiliki izin akses ke tabel tersebut. Untuk mengatasi skenario ini, Hologres V3.0.23 dan versi selanjutnya mendukung izin tingkat baris untuk tabel sistem pg_class, pg_attribute, dan pg_namespace. Hal ini memastikan bahwa hanya pengguna dengan izin akses yang dapat melihat metadata yang sesuai. Gunakan parameter Grand Unified Configuration (GUC) berikut untuk mengaktifkan izin tingkat baris:

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

  • Superuser harus mengatur parameter ini. Eksekusi sekali untuk setiap database.

  • Setelah diatur, hanya Superuser, pengguna dengan izin Owner pada objek (tabel atau schema), atau pengguna dengan hak istimewa apa pun pada objek (tabel atau schema) yang dapat melihat metadata yang sesuai. Pengguna lain tidak memiliki izin untuk melihatnya.

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

Untuk informasi lebih lanjut tentang tabel sistem, lihat Tabel sistem.

Lihat izin

Gunakan perintah SQL berikut untuk melihat role dan izin pengguna.

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

Hapus pengguna

Jika Anda telah terhubung ke instans Anda dengan tool pengembangan, Anda dapat menggunakan pernyataan SQL untuk menghapus Pengguna RAM. Ada dua skenario.

  • Hapus pengguna biasa

    Jika Anda menghapus pengguna biasa dan akun tersebut belum membuat objek lain seperti tabel, view, atau ekstensi, Anda dapat mengeksekusi perintah berikut atau menghapus pengguna langsung di HoloWeb.

    drop user "ID akun Alibaba Cloud/email";
  • Hapus Superuser atau administrator lain

    Jika Anda ingin menghapus Superuser, Admin, atau administrator lain yang telah membuat objek seperti tabel, view, atau ekstensi di instans dan merupakan pemilik objek-objek tersebut (terutama dalam model otorisasi PostgreSQL standar), penghapusan langsung akan gagal. Anda harus terlebih dahulu mentransfer kepemilikan objek-objek di bawah akun tersebut. Eksekusi perintah berikut.

    -- Transfer objek dari 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 menggunakan metode berikut untuk menghapus Pengguna RAM dari instans:

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

Setelah Pengguna RAM dihapus, pengguna tersebut tidak dapat lagi terhubung ke instans atau mengakses objek apa pun di dalamnya. Lakukan dengan hati-hati.

PostgreSQL standar memiliki pembagian izin yang sangat ketat. Kami menyediakan praktik terbaik yang dapat Anda pilih dan jadikan referensi sesuai kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Berikan izin berdasarkan model izin PostgreSQL standar.