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.
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.
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.
CatatanIzin 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
CatatanPengguna 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
publicALTER 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
CatatanJika 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.
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.
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.
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;
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 TOuntuk 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;Parameter GUC ini hanya memengaruhi tabel sistem
pg_class,pg_attribute, danpg_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";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.