全部产品
Search
文档中心

Hologres:Model Otorisasi PostgreSQL Standar

更新时间:Aug 05, 2025

Hologres kompatibel dengan PostgreSQL dan mendukung penggunaan model otorisasi PostgreSQL standar. Topik ini menjelaskan cara memberikan dan mencabut izin menggunakan model tersebut.

Berikan izin dengan menggunakan model otorisasi PostgreSQL standar

Setelah menghubungkan instance Hologres ke alat pengembangan, Anda dapat mengeksekusi pernyataan SQL untuk memberikan izin kepada pengguna menggunakan model otorisasi PostgreSQL standar.

  1. Buat Pengguna

    Anda harus membuat pengguna Hologres untuk akun sebelum akun tersebut dapat digunakan untuk mengakses Hologres dan mengembangkan data.

    Gunakan sintaks berikut untuk membuat pengguna:

    -- Buat pengguna yang memiliki izin untuk masuk ke instance Hologres. Jika Anda ingin memberikan izin kepada pengguna RAM, Anda harus menentukan ID akun dalam format yang diperlukan untuk pengguna RAM.
    CREATE USER "ID akun Alibaba Cloud/Alamat email Alibaba Cloud";
    -- Buat pengguna dan tetapkan peran superuser kepada pengguna.
    CREATE USER "ID akun Alibaba Cloud/Alamat email Alibaba Cloud" SUPERUSER;

    Contoh pernyataan berikut menunjukkan cara membuat pengguna. Untuk informasi lebih lanjut tentang format yang digunakan untuk menentukan akun Alibaba Cloud dan pengguna RAM di Hologres, lihat Ikhtisar.

    -- Gunakan ID akun Alibaba Cloud untuk membuat pengguna.
    CREATE USER "11822780xxx";
    -- Buat pengguna RAM dan tetapkan peran superuser kepada pengguna RAM.
    CREATE USER "p4_1822780xxx" SUPERUSER;

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

  2. Berikan Izin kepada Pengguna

    Setelah membuat pengguna Hologres, Anda harus memberikan izin kepada pengguna tersebut agar dapat melakukan operasi yang diizinkan di Hologres. Anda dapat memberikan izin pada database, tabel, tampilan, dan kolom menggunakan model otorisasi PostgreSQL standar. Tabel berikut menjelaskan pernyataan umum untuk memberikan izin di Hologres.

    Catatan

    Izin hanya dapat diberikan pada objek yang sudah ada menggunakan model otorisasi PostgreSQL standar. Izin tidak berlaku untuk objek yang dibuat setelah pemberian izin. Sebagai contoh, jika Pengguna A memberikan izin SELECT kepada Pengguna B pada semua tabel di public schema, lalu Pengguna A membuat tabel baru di skema tersebut, Pengguna B tidak memiliki izin SELECT pada tabel baru tersebut. Untuk memberikan akses, Pengguna A harus memberikan izin SELECT pada tabel baru kepada Pengguna B.

    Operasi

    Sintaks Pernyataan

    Diperlukan

    Buat pengguna yang memiliki izin untuk masuk ke instance Hologres

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

    Ya

    Buat pengguna dan tetapkan peran superuser kepada pengguna

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

    Tidak

    Berikan pengguna izin untuk membuat tabel di skema

    GRANT CREATE ON SCHEMA schema_name TO "ID akun Alibaba Cloud/Alamat email Alibaba Cloud";

    Tidak

    Berikan pengguna izin untuk mengakses skema

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

    Ya

    Catatan

    Pengguna dapat menanyai tabel di skema hanya setelah pengguna diberi izin untuk mengakses skema.

    Berikan semua pengguna izin SELECT, INSERT, dan UPDATE pada semua tabel di public schema

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

    Tidak

    Berikan pengguna izin SELECT pada tabel

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

    Tidak

    Berikan pengguna izin SELECT pada tabel dan otorisasi pengguna untuk memberikan izin kepada pengguna lain

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

    Tidak

    Berikan pengguna izin SELECT pada semua tabel di public schema

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

    Tidak

    Berikan semua pengguna izin SELECT pada tabel yang akan dibuat oleh pemberi izin saat ini di skema public

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

    Tidak

    Ubah peran pengguna dari pengguna biasa menjadi superuser

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

    Tidak

    Ubah peran pengguna dari superuser menjadi pengguna biasa

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

    Tidak

    Konfigurasikan pengguna sebagai pemilik tabel yang dibuat oleh pengguna lain

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

    Tidak

    Buat peran yang tidak memiliki izin untuk masuk ke instance Hologres

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

    Tidak

    Tetapkan peran kepada pengguna

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

    Tidak

    Berikan pengguna izin SELECT pada kolom tertentu dari tabel

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

    Tidak

    Berikan pengguna izin SELECT pada tampilan

    Catatan
    • Jika Anda menggunakan model otorisasi PostgreSQL standar dan ingin mengakses tampilan, Anda harus diberi izin SELECT pada tampilan.

    • Jika Anda menggunakan model izin sederhana (SPM) atau model izin tingkat skema (SLPM) dan ingin mengakses tampilan, Anda harus ditambahkan ke grup pengguna viewer atau grup pengguna tingkat lebih tinggi.

    -- Berikan pengguna izin SELECT pada tampilan dengan menggunakan model otorisasi PostgreSQL standar.
    GRANT SELECT ON <viewname> TO "ID akun Alibaba Cloud/Alamat email Alibaba Cloud";

    Tidak

    Contohnya, gunakan pernyataan SQL berikut untuk memberikan izin SELECT pada tabel kepada pengguna baru menggunakan model otorisasi PostgreSQL standar:

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

    Pernyataan CREATE ROLE digunakan untuk membuat peran tanpa izin masuk ke instance Hologres. Contohnya, Anda dapat membuat peran virtual atau kelompok pengguna yang mewakili jenis pengguna tertentu. Untuk informasi lebih lanjut tentang pemberian izin, lihat GRANT.

  3. Berikan Satu atau Beberapa Pengguna Izin untuk Menghapus Tabel

    Hanya superuser dan pemilik tabel yang dapat menghapus tabel. Anda dapat memberikan satu atau beberapa pengguna izin untuk menghapus tabel menggunakan salah satu metode berikut:

    • Konfigurasikan pengguna baru sebagai pemilik tabel.

      ALTER TABLE TABLENAME OWNER TO "ID akun Alibaba Cloud/Alamat email Alibaba Cloud";
    • Tetapkan peran superuser kepada pengguna baru.

      ALTER USER "ID akun Alibaba Cloud/Alamat email Alibaba Cloud" SUPERUSER;
    • Tambahkan beberapa pengguna ke grup pengguna dan tetapkan kepemilikan tabel kepada grup pengguna.

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

Berikan izin pada tabel yang akan dibuat

Secara default, izin yang diberikan pada tabel menggunakan model otorisasi PostgreSQL standar tidak termasuk izin pada tabel yang akan dibuat. Gunakan pernyataan ALTER DEFAULT PRIVILEGES untuk memberikan izin pada tabel yang akan dibuat.

Catatan
  • Pernyataan ini tidak memengaruhi izin pada objek yang sudah ada.

  • Pernyataan ini hanya dapat digunakan untuk memberikan izin default pada tabel, skema, fungsi, urutan, dan tipe.

  1. Berikan Izin

    • Berikan semua pengguna atau pengguna tertentu izin SELECT sebagai izin default pada tabel yang akan dibuat di skema tertentu oleh pengguna lain. Contoh:

      • Berikan semua pengguna izin SELECT pada tabel yang akan dibuat di public schema oleh pengguna p4_id1.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;
      • Berikan pengguna p4_id2 izin SELECT pada tabel yang akan dibuat di public schema oleh pengguna p4_id1.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO "p4_id2";
      • Berikan semua pengguna izin SELECT pada tabel yang akan dibuat di test schema oleh pengguna p4_id1.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test GRANT SELECT ON TABLES TO PUBLIC;
    • Cabut izin default yang telah diberikan. Contoh:

      • Cabut izin SELECT pada tabel yang akan dibuat di public schema oleh pengguna p4_id1 dari semua pengguna.

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

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

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test REVOKE SELECT ON TABLES FROM PUBLIC;
  2. Periksa Apakah Izin Default Telah Diberikan

    • Jalankan perintah \ddp pada klien PostgreSQL untuk menanyai hasil eksekusi pernyataan ALTER DEFAULT PRIVILEGES.

    • Eksekusi pernyataan SQL berikut di Hologres untuk memeriksa hasilnya:

      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;

    Saat membuat tabel sebagai pengguna, Hologres memeriksa pengguna dan skema berdasarkan tabel sistem pg_catalog.pg_default_acl. Jika pernyataan ALTER DEFAULT PRIVILEGES terdeteksi, Hologres menggunakan aturan pencocokan yang relevan untuk otentikasi. Perhatikan aturan pencocokan berikut:

    • Jika Anda melakukan operasi sebagai pengguna, Hologres memeriksa apakah pengguna memiliki izin default.

    • Jika Anda mengeksekusi pernyataan SET SESSION ROLE GROUP1; sebelum Anda membuat tabel sebagai pengguna, peran GROUP1 ditetapkan kepada pengguna. Lalu, Hologres memeriksa apakah peran GROUP1 memiliki izin default.

    Aturan pencocokan ini hanya berlaku saat Anda membuat tabel. Jika Anda mengeksekusi pernyataan ALTER TABLE SET OWNER TO untuk mengubah pemilik tabel setelah tabel dibuat, aturan pencocokan tidak dipicu.

Cabut izin dengan menggunakan model otorisasi PostgreSQL standar

Untuk mencabut izin tertentu dari pengguna, eksekusi pernyataan REVOKE berikut. Untuk informasi lebih lanjut, lihat REVOKE.

REVOKE SELECT ON TABLE tablename FROM "ID akun Alibaba Cloud/Alamat email Alibaba Cloud"; -- Untuk pengguna RAM, Anda harus menentukan ID akun dalam format yang diperlukan untuk pengguna RAM.

Kontrol akses katalog sistem

Mulai dari Hologres V3.0, pengguna yang terhubung ke instans, terlepas dari izin yang diberikan, dapat mengakses katalog sistem: pg_class, pg_attribute, dan pg_namespace. Ini berarti pengguna apa pun dapat mencantumkan skema, tabel, dan kolom dalam instans, menimbulkan risiko keamanan ketika pengguna mengakses instans melalui BI dan alat pengembang. Untuk meningkatkan keamanan, Hologres V3.0.23 dan versi selanjutnya memperkenalkan kontrol akses tingkat baris (RLS) untuk tabel sistem ini. Ini memastikan hanya pengguna dengan izin yang diperlukan yang dapat melihat metadata tabel. Untuk mengaktifkan RLS untuk katalog sistem ini, atur parameter GUC hg_experimental_enable_catalog_rls ke on:

-- Pengaturan Superuser
ALTER DATABASE <nama_database> SET hg_experimental_enable_catalog_rls = on;
Catatan
  • Parameter GUC ini hanya memengaruhi tabel sistem pg_class, pg_attribute, dan pg_namespace.

  • Aktifkan parameter ini sebagai superuser di tingkat database.

  • Setelah diaktifkan, hanya superuser, pemilik tabel atau skema, dan pengguna dengan izin apa pun pada tabel atau skema yang dapat melihat metadata terkait.

Untuk informasi lebih lanjut, lihat Tabel Sistem.

Tanyai izin pengguna

Eksekusi pernyataan SQL berikut untuk menanyai izin pengguna:

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

Hapus pengguna

Jika instance Hologres terhubung ke alat pengembangan, Anda dapat menggunakan pernyataan SQL untuk menghapus pengguna.

  • Menghapus Pengguna Biasa

    Jika pengguna biasa belum membuat objek seperti tabel, tampilan, atau ekstensi, Anda dapat mengeksekusi pernyataan berikut untuk menghapus pengguna dari instance Hologres. Anda juga dapat menghapus pengguna di konsol HoloWeb.

    drop user "ID akun Alibaba Cloud/Alamat email Alibaba Cloud";
  • Menghapus Administrator seperti Pengguna dengan Peran Superuser

    Jika Anda ingin menghapus administrator seperti pengguna yang ditetapkan dengan peran superuser atau admin menggunakan model otorisasi PostgreSQL standar, dan administrator telah membuat objek seperti tabel, tampilan, atau ekstensi, Anda harus mentransfer objek tersebut ke pengguna lain sebelum menghapus administrator. Jika tidak, pesan kesalahan akan dilaporkan. Contoh pernyataan:

    -- Transfer objek yang dimiliki oleh Pengguna A ke Pengguna B.
    REASSIGN OWNED BY "ID akun Alibaba Cloud Pengguna A" to "ID akun Alibaba Cloud Pengguna B";     
    -- Hapus Pengguna A.
    drop user "ID akun Alibaba Cloud Pengguna A";

Gunakan pernyataan SQL berikut untuk menghapus pengguna RAM dari instance Hologres:

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

Setelah menghapus pengguna RAM dari instance Hologres, Anda tidak dapat menggunakan pengguna RAM untuk terhubung ke instance atau mengakses objek di instance. Lanjutkan dengan hati-hati.

Model otorisasi PostgreSQL standar membagi izin secara ketat. Praktik terbaik untuk menggunakan model ini disediakan sebagai referensi Anda. Anda dapat menggunakan model ini berdasarkan praktik terbaik dan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Berikan Izin Berdasarkan Model Otorisasi PostgreSQL Standar.