Hologres kompatibel dengan PostgreSQL dan menggunakan sistem otorisasi yang sama, yang dikenal sebagai model izin ahli. Anda dapat memberikan dan mencabut hak istimewa pengguna dengan menjalankan pernyataan PostgreSQL standar.
Pemberian hak istimewa
Hologres tidak menyediakan operasi OpenAPI untuk manajemen role. Anda tidak dapat membuat, mengubah, atau menghapus role melalui OpenAPI. Kelola role dengan menjalankan pernyataan SQL: hubungkan ke instans menggunakan klien seperti JDBC atau psql, atau panggil operasi ExecuteStatement untuk menjalankan SQL melalui OpenAPI. Operasi ini mendukung pernyataan DDL. Sebelum menggunakannya, aktifkan eksekusi SQL untuk instans tersebut dan berikan pemanggil izin yang diperlukan.
Untuk akun dan hak istimewa, OpenAPI Hologres hanya menyediakan operasi manajemen pengguna (CreateUser dan DropUser) serta operasi yang memberikan atau mencabut hak istimewa pada tingkat database, skema, dan tabel (GrantDatabasePermission, GrantSchemaPermission, GrantTablePermission, dan operasi Revoke yang sesuai). Untuk daftar lengkap operasi, lihat Ikhtisar API.
Setelah menghubungkan instans Hologres ke alat pengembangan, Anda dapat menjalankan pernyataan SQL untuk memberikan hak istimewa kepada pengguna.
-
Buat pengguna.
Akun harus terlebih dahulu dibuat sebagai pengguna Hologres sebelum dapat mengakses dan mengembangkan di 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 lebih lanjut 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 lebih lanjut tentang pembuatan role, lihat CREATE ROLE.
-
Berikan hak istimewa.
Setelah membuat pengguna Hologres, Anda harus memberikan hak istimewa kepada mereka. Model izin ahli memungkinkan Anda mengontrol hak istimewa pada tingkat database, tabel, tampilan, dan kolom.
CatatanModel otorisasi PostgreSQL standar hanya dapat memberikan hak istimewa pada objek yang sudah ada. Hak istimewa ini 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 pada tabel baru tersebut.
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 skema
GRANT CREATE ON SCHEMA schema_name TO "Akun Alibaba Cloud/alamat email";Opsional
Berikan hak istimewa USAGE pada skema
GRANT USAGE ON SCHEMA schema_name TO "ID akun Alibaba Cloud/alamat email";Diperlukan
CatatanPengguna harus memiliki hak istimewa USAGE pada skema untuk melakukan kueri pada 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 skema
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 tampilan
Catatan-
Dalam model otorisasi PostgreSQL standar, Anda harus memberikan hak istimewa SELECT pada tampilan untuk mengaksesnya.
-
Dalam model izin simple (SPM)/model izin tingkat skema (SLPM), Anda harus menjadi anggota kelompok pengguna viewer atau kelompok pengguna dengan hak istimewa lebih tinggi untuk mengakses tampilan.
-- Berikan hak istimewa SELECT kepada pengguna pada tampilan menggunakan model otorisasi PostgreSQL standar. GRANT SELECT ON <viewname> TO "ID akun Alibaba Cloud/alamat email" ;Opsional
Untuk memberikan hak istimewa SELECT pada tabel kepada pengguna baru, jalankan pernyataan berikut:
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 membuat role tanpa hak istimewa login, seperti kelompok pengguna atau role virtual yang mewakili jenis pengguna tertentu. Untuk informasi lebih lanjut tentang pemberian hak istimewa, lihat GRANT.
-
-
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.
-
Pernyataan ini tidak memengaruhi objek logis yang sudah ada.
-
Pernyataan ini hanya dapat mengatur hak istimewa default untuk tabel, skema, fungsi, sequence, atau tipe.
-
Berikan hak istimewa.
-
Setelah Anda mengonfigurasi hak istimewa default, tabel yang dibuat oleh pengguna dalam skema tertentu dapat dikueri oleh pengguna tertentu atau semua pengguna.
-
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;
-
-
-
Verifikasi bahwa hak istimewa default telah ditetapkan.
-
Di klien 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 dan skema saat ini dengan 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 TOuntuk mengubah pemilik tabel setelah tabel dibuat, aturan pencocokan tidak dipicu. -
Pencabutan hak istimewa
Untuk mencabut hak istimewa dari pengguna, jalankan pernyataan REVOKE. Untuk informasi lebih lanjut tentang pencabutan hak istimewa, lihat REVOKE.
Sebelum mencabut hak istimewa skema, periksa apakah akun tersebut memiliki pekerjaan terjadwal di DataWorks. Jika iya, tetapkan ulang pekerjaan tersebut ke akun aktif yang berwenang melalui Pusat Operasi 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, pengguna mana pun yang terhubung ke database dapat melihat informasi tentang semua skema dan tabel 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 skema, tabel, dan kolom dari katalog sistem ini. Untuk membatasi visibilitas metadata hanya kepada pengguna yang berwenang, Hologres versi 3.0.23 dan yang lebih baru mendukung kontrol akses tingkat baris (RLS) pada ketiga katalog sistem ini. 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 skema) 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;
Untuk informasi lebih lanjut tentang katalog sistem, lihat Katalog Sistem.
Menampilkan hak istimewa
Jalankan 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
Anda dapat menjalankan pernyataan SQL untuk menghapus pengguna dari instans yang terhubung ke alat pengembangan. Prosedurnya bervariasi berdasarkan jenis pengguna.
-
Hapus pengguna biasa
Untuk menghapus pengguna biasa yang belum membuat objek apa pun seperti tabel, tampilan, 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 memiliki objek, Anda harus terlebih dahulu mengalihkan kepemilikan objek tersebut. Mencoba menghapus pengguna tersebut 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 menggunakan salah satu metode berikut:
DROP USER "ID akun Alibaba Cloud/alamat email";
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 dalam memilih pendekatan otorisasi berdasarkan kebutuhan bisnis Anda, lihat Otorisasi berdasarkan model izin PostgreSQL standar.