Topik ini menjelaskan cara menggunakan Model Izin Tingkat Skema (SLPM) di Hologres dengan mengeksekusi pernyataan SQL.
Batasan
SLPM mengelola izin pada skema secara ketat. Saat menggunakan model ini untuk memberikan izin, perhatikan hal-hal berikut:
Izin tidak dibagi antar skema. Jika Anda merujuk dua atau lebih tabel dalam skema yang berbeda saat membuat tampilan atau aturan, the created view or rule cannot be accessed. Dalam hal ini, pesan kesalahan
ERROR: permission denied for tableakan ditampilkan. Kami sarankan agar Anda tidak membuat tampilan atau aturan dengan menggunakan tabel dalam skema yang berbeda di database tempat SLPM diaktifkan. Untuk informasi lebih lanjut tentang cara membuat tampilan lintas skema, lihat Buat tampilan lintas skema menggunakan SLPM (beta) dalam topik ini.Setelah SLPM diaktifkan, hanya izin tertentu yang dapat diberikan. Untuk informasi lebih lanjut tentang izin tersebut, lihat Berikan izin menggunakan SLPM dalam topik ini. Setelah mengaktifkan SLPM untuk database, Anda tidak dapat melakukan operasi dengan mengeksekusi pernyataan DDL yang dijelaskan dalam tabel berikut. Anda harus melakukan operasi terkait dengan memanggil fungsi SLPM yang sesuai dengan pernyataan DDL tersebut. Untuk informasi lebih lanjut tentang fungsi-fungsi tersebut, lihat Fungsi SLPM.
Pernyataan DDL
Deskripsi
Fungsi SLPM
alter table owner to xx
Setelah Anda mengaktifkan SLPM untuk database, kepemilikan semua tabel dalam skema database dipindahkan ke anggota grup {db}.{schema}.developer. Anda tidak dapat memindahkan kepemilikan tabel-tabel tersebut.
Kepemilikan tabel dipindahkan secara otomatis.
grant
Setelah Anda menambahkan pengguna ke grup pengguna, pengguna secara otomatis diberi izin dari grup pengguna tersebut. Anda tidak perlu memanggil fungsi slpm_grant untuk memberikan izin grup pengguna kepada pengguna tersebut.
slpm_grant
revoke
Anda tidak dapat memanggil fungsi slpm_revoke untuk mencabut izin tertentu dari pengguna. Sebagai gantinya, Anda dapat menghapus pengguna dari grup pengguna tertentu untuk mencabut izin tertentu dari pengguna tersebut.
slpm_revoke
alter default privileges
Dalam model otorisasi PostgreSQL standar, Anda hanya dapat memberikan izin kepada pengguna pada tabel dan objek yang sudah ada. Untuk mengelola objek dan tabel yang akan dibuat di masa mendatang, Anda harus memberikan izin yang diperlukan lagi. Dalam SLPM, Anda dapat menambahkan pengguna ke grup pengguna untuk memberikan izin yang diperlukan pada semua tabel atau objek dari jenis tertentu, termasuk objek dan tabel dari jenis-jenis tersebut yang akan dibuat di masa mendatang.
Pengguna diberi izin yang diperlukan saat mereka ditambahkan ke grup pengguna.
create/drop/alter/rename default user groups
Setelah SLPM diaktifkan, grup pengguna {db}.admin, {db}.{schema}.developer, {db}.{schema}.writer, dan {db}.{schema}.viewer dibuat oleh sistem secara default. Semua pengguna termasuk superuser tidak dapat membuat, memodifikasi, atau menghapus grup pengguna tersebut.
Tidak tersedia.
rename schema
Untuk mengganti nama skema, Anda harus memanggil fungsi
slpm_rename_schemadalam database tetapi jangan mengeksekusi pernyataanalter rename schema.slpm_rename_schema
rename database
Untuk mengganti nama database, Anda harus memanggil fungsi
slpm_rename_databasetetapi jangan mengeksekusi pernyataanalter rename database.slpm_rename_database
drop database
Untuk menghapus database, Anda harus mengeksekusi pernyataan
drop databasedan memanggil fungsislpm_cleanup('<dbname>')untuk menghapus pengguna default.Untuk menghapus database, Anda harus mengeksekusi pernyataan
drop databasedan memanggil fungsislpm_cleanup('<dbname>')untuk menghapus pengguna default.Hanya Hologres V1.3.36 dan versi lebih baru yang mendukung pembuatan tampilan lintas skema. Jika versi instance Hologres Anda lebih lama dari V1.3.36, tingkatkan instance Hologres Anda secara manual di Konsol Hologres atau bergabunglah dengan grup DingTalk Hologres untuk mengajukan peningkatan instance. Untuk informasi lebih lanjut tentang cara meningkatkan instance Hologres secara manual, lihat Tingkatkan instance. Untuk informasi lebih lanjut tentang cara bergabung dengan grup DingTalk Hologres, lihat Dapatkan dukungan online untuk Hologres.
Berikan izin menggunakan SLPM
Setelah menggunakan alat pengembangan untuk terhubung ke instance Hologres, Anda dapat mengaktifkan SLPM untuk memberikan izin kepada pengguna dengan mengeksekusi pernyataan SQL. Dengan cara ini, pengguna diberi izin yang diperlukan pada skema.
Aktifkan pemanggilan fungsi.
Sebelum mengaktifkan SLPM, Anda harus mengeksekusi pernyataan berikut untuk mengaktifkan pemanggilan fungsi. Dalam contoh ini, pernyataan create extension dieksekusi hanya sekali dalam database.
create extension slpm;Aktifkan SLPM.
Secara default, SLPM dinonaktifkan. Anda harus mengeksekusi pernyataan berikut untuk mengaktifkan SLPM untuk database sebagai superuser. Pastikan tidak ada pernyataan SQL yang sedang dieksekusi dalam database saat mengaktifkan SLPM. Jika tidak, aktivasi SLPM mungkin gagal dan bisnis Anda dapat terpengaruh.
call slpm_enable (); // Aktifkan SLPM untuk database saat ini.Opsional. Beralih dari model otorisasi PostgreSQL standar ke SLPM untuk objek yang ada.
Anda dapat melakukan langkah-langkah berikut untuk menanyakan model izin:
Masuk ke Konsol Hologres. Di panel navigasi sisi kiri, klik Go to HoloWeb.
Di halaman HoloWeb, klik Security Center dan lihat model izin yang digunakan di halaman Database Authorization.
Jika database menggunakan model otorisasi PostgreSQL standar dan berisi objek seperti tabel, tampilan, dan tabel asing, Anda dapat memanggil fungsi slpm_migrate untuk beralih dari model otorisasi PostgreSQL standar ke SLPM untuk objek-objek tersebut.
call slpm_migrate (); // Pindahkan kepemilikan objek yang ada dalam database ke pengembang yang ditentukan dalam SLPM.Saat beralih dari model otorisasi PostgreSQL standar ke SLPM untuk objek-objek tersebut, perhatikan informasi berikut:
Secara default, setiap kali Anda memanggil fungsi slpm_migrate, fungsi tersebut memindahkan kepemilikan hingga 64 objek ke pengembang yang ditentukan dalam SLPM. Anda dapat memodifikasi parameter batch_size dalam fungsi ini. Jika jumlah objek melebihi 64, Anda harus memanggil fungsi slpm_migrate berulang kali sampai kepemilikan semua objek dipindahkan. Untuk informasi lebih lanjut tentang fungsi ini, lihat slpm_migrate.
Buat pengguna di instance Hologres.
Sebelum memberikan izin kepada pengguna, Anda harus membuat pengguna di instance Hologres saat ini. Jika Anda memberikan izin kepada pengguna yang sudah ada di instance, lewati langkah ini.
Dalam pernyataan berikut, klausa {dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer] digunakan untuk menentukan grup pengguna di database saat ini. Untuk informasi lebih lanjut tentang grup pengguna, lihat Ikhtisar.
call slpm_create_user ('ID akun Alibaba Cloud/Alamat email Alibaba Cloud/ID pengguna RAM'); // Buat pengguna di instance Hologres. Alamat email Alibaba Cloud harus diapit tanda kutip ganda ("). call slpm_create_user ('ID akun Alibaba Cloud/Alamat email Alibaba Cloud/ID pengguna RAM', '{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]'); // Buat pengguna di instance Hologres dan tambahkan pengguna ke grup pengguna database.CatatanSaat memanggil fungsi
slpm_create_useruntuk menambahkan pengguna RAM ke instance Hologres, Anda harus menambahkan awalanp4_pada ID pengguna (UID) pengguna RAM. Contoh:p4_UID. Anda dapat pergi ke halaman Pengguna di Konsol RAM untuk mendapatkan UID pengguna RAM. Untuk informasi lebih lanjut tentang nama tampilan pengguna RAM di Hologres, lihat Ikhtisar.SLPM tidak mendukung nama pengguna RAM kustom yang diakhiri dengan
admin,developer,writer,viewer, atauall_users.
Tambahkan pengguna ke grup pengguna.
Setelah membuat pengguna di instance Hologres, Anda harus menambahkan pengguna ke grup pengguna dalam database untuk memberikan izin kepada pengguna. Jika Anda telah menentukan grup pengguna untuk pengguna saat membuat pengguna, lewati langkah ini.
Dalam pernyataan berikut, klausa {dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer] digunakan untuk menentukan grup pengguna di database saat ini. Untuk informasi lebih lanjut tentang grup pengguna, lihat Ikhtisar.
call slpm_grant ('{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]', 'ID akun Alibaba Cloud/Alamat email Alibaba Cloud/ID pengguna RAM'); // Tambahkan pengguna ke grup pengguna.Anda dapat mengeksekusi salah satu pernyataan berikut untuk menambahkan pengguna ke grup pengguna tertentu:
// Tambahkan pengguna ke grup pengguna {db}.admin dari database. call slpm_grant ('mydb.admin', '197006222995xxx'); // Tambahkan pengguna dengan UID 197006222995xxx ke grup pengguna mydb.admin. call slpm_grant ('mydb.admin', 'ALIYUN$xxx'); // Tambahkan pengguna dengan alamat email Alibaba Cloud xxx@aliyun.com ke grup pengguna mydb.admin. // Tambahkan pengguna ke grup pengguna {db}.{schema}.developer dari database. call slpm_grant ('mydb.public.developer', '197006222995xxx'); // Tambahkan pengguna dengan UID 197006222995xxx ke grup pengguna mydb.public.developer. call slpm_grant ('mydb.public.developer', 'RAM$mainaccount:subuser'); // Tambahkan pengguna RAM bernama subuser dari akun Alibaba Cloud bernama mainaccount ke grup pengguna mydb.public.developer. // Tambahkan pengguna ke grup pengguna {db}.{schema}.viewer dari database. call slpm_grant ('"MYDB.lisa.viewer"', '197006222995xxx'); // Tambahkan pengguna dengan UID 197006222995xxx ke grup pengguna MYDB.lisa.viewer. call slpm_grant ('mydb.lisa.viewer', '"xxx@aliyun.com"'); // Tambahkan pengguna dengan alamat email Alibaba Cloud xxx@aliyun.com ke grup pengguna mydb.lisa.viewer.
Hapus pengguna dari grup pengguna
Anda dapat mengeksekusi pernyataan berikut untuk menghapus pengguna dari grup pengguna. Setelah pengguna dihapus dari grup pengguna, pengguna tersebut tidak memiliki izin dari grup pengguna tersebut.
Dalam pernyataan berikut, klausa {dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer] digunakan untuk menentukan grup pengguna di database saat ini. Untuk informasi lebih lanjut tentang grup pengguna, lihat Ikhtisar.
call slpm_revoke ('{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]', 'ID akun Alibaba Cloud/Alamat email Alibaba Cloud/ID pengguna RAM'); // Cabut izin dari pengguna tertentu.Anda dapat mengeksekusi salah satu pernyataan berikut untuk menghapus pengguna dari grup pengguna tertentu:
// Hapus pengguna dari grup pengguna {db}.admin dari database.
call slpm_revoke ('dbname.admin', 'p4_564306222995xxx'); // Hapus pengguna RAM dengan UID 564306222995xxx dari grup pengguna {db}.admin.
call slpm_revoke ('dbname.admin', '197006222995xxx'); // Hapus pengguna dengan ID akun Alibaba Cloud 197006222995xxx dari grup pengguna {db}.admin.
call slpm_revoke ('dbname.admin', '"xxx@aliyun.com"');
// Hapus pengguna dari grup pengguna {db}.{schema}.developer dari database.
call slpm_revoke ('mydb.lisa.developer', 'RAM$mainaccount:subuser'); // Hapus pengguna RAM bernama subuser dari grup pengguna mydb.lisa.developer.
call slpm_revoke ('mydb.public.developer', 'p4_564306222995xxx'); // Hapus pengguna RAM dengan UID 564306222995xxx dari grup pengguna mydb.public.developer.
// Hapus pengguna dari grup pengguna {db}.{schema}.viewer dari database.
call slpm_revoke ('"MYDB.SCHEMA1.viewer"', 'p4_564306222995xxx'); // Hapus pengguna RAM dengan UID 564306222995xxx dari grup pengguna MYDB.SCHEMA1.viewer.Hapus pengguna
Anda dapat menghapus pengguna berdasarkan kebutuhan bisnis Anda. Setelah pengguna dihapus dari instance Hologres, pengguna tersebut tidak memiliki izin pada instance tersebut. Lakukan dengan hati-hati.
DROP ROLE "ID akun Alibaba Cloud/Alamat email Alibaba Cloud/ID pengguna RAM"; // Hapus pengguna dari instance Hologres.Nonaktifkan SLPM
Jika Anda tidak lagi memerlukan SLPM, Anda dapat melakukan langkah-langkah berikut untuk menonaktifkannya.
Nonaktifkan SLPM.
Setelah SLPM diaktifkan, superuser dapat mengeksekusi pernyataan berikut untuk menonaktifkan SLPM untuk database. Setelah superuser menonaktifkan SLPM untuk database, grup pengguna database tidak dihapus. Untuk informasi lebih lanjut tentang izin anggota dalam grup pengguna, lihat Fungsi SLPM.
call slpm_disable ();Saat menonaktifkan SLPM, perhatikan item berikut:
Hanya superuser yang dapat menonaktifkan SLPM untuk database.
Setelah SLPM dinonaktifkan, grup PUBLIC diberi izin USAGE dan CREATE pada skema publik database, izin CONNECT dan TEMPORARY pada database, izin EXECUTE pada fungsi dan prosedur database, serta izin USAGE pada bahasa dan tipe data (termasuk domain) database.
Setelah SLPM dinonaktifkan, grup PUBLIC tidak memiliki izin pada objek selain yang disebutkan sebelumnya. Misalnya, grup PUBLIC tidak memiliki izin pada tabel, tampilan, tampilan material, kolom tabel, urutan, pembungkus data asing, server asing, atau skema. Skema publik dikecualikan. Hubungi superuser untuk mendapatkan izin ini berdasarkan kebutuhan bisnis Anda.
Setelah SLPM dinonaktifkan, anggota dalam grup pengguna {db}.admin, {db}.{schemaname}.developer, {db}.{schemaname}.writer, dan {db}.{schemaname}.viewer mempertahankan izin yang diperoleh pada objek yang ada tetapi tidak memiliki izin pada objek baru.
Hapus grup pengguna database. Untuk memudahkan manajemen pengguna, kami sarankan Anda mempertahankan grup pengguna.
Setelah SLPM dinonaktifkan, Anda dapat memanggil fungsi slpm_cleanup untuk menghapus grup pengguna database dalam salah satu kasus berikut:
Kasus 1: Hapus grup pengguna dari database yang ada
Jika Anda ingin menghapus grup pengguna tetapi tetap mempertahankan database, eksekusi pernyataan berikut sebagai superuser:
call slpm_cleanup ( '<dbname>' );CatatanSaat memanggil fungsi slpm_cleanup, pastikan tidak ada pernyataan SQL yang sedang dieksekusi dalam database. Jika tidak, Anda mungkin gagal menghapus grup pengguna dan bisnis Anda mungkin terpengaruh.
Fungsi slpm_cleanup digunakan untuk mentransfer kepemilikan objek ke pengguna saat ini. Namun, kepemilikan hingga 64 objek dapat ditransfer menggunakan fungsi ini setiap kali. Anda dapat memodifikasi parameter batch_size dalam fungsi ini. Akibatnya, Anda mungkin perlu memanggil fungsi slpm_cleanup berulang kali sampai kepemilikan semua objek ditransfer dan semua grup pengguna database dihapus. Kami sarankan Anda memanggil ulang fungsi ini tidak lebih dari lima kali. Untuk informasi lebih lanjut tentang fungsi ini, lihat slpm_cleanup.
Kasus 2: Hapus grup pengguna dari database yang dihapus
Untuk menghapus grup pengguna dari database yang dihapus, eksekusi pernyataan berikut di database lain sebagai superuser. Dalam contoh ini, eksekusi pernyataan di database postgres.
call slpm_cleanup ( 'mydb' );
Aktifkan SLPM lagi
Anda dapat melakukan operasi berikut untuk mengaktifkan SLPM untuk database lagi.
Cabut izin dari pengguna.
Sebelum mengaktifkan SLPM, kami sarankan Anda mengeksekusi pernyataan berikut untuk mencabut semua izin pengguna dalam database:
call slpm_cleanup ( '<dbname>' );Aktifkan SLPM lagi.
Setelah izin pengguna dicabut, eksekusi pernyataan berikut untuk mengaktifkan SLPM lagi:
-- Aktifkan SLPM dalam mode pemulihan. call slpm_enable ('t'); -- Transfer kepemilikan objek yang ada dalam database ke pengembang yang ditentukan dalam SLPM. Pernyataan ini harus dieksekusi. call slpm_migrate ();Berikan izin kepada pengguna.
Setelah SLPM diaktifkan kembali, Anda dapat memberikan izin kepada pengguna di Konsol Hologres atau dengan mengeksekusi pernyataan SQL. Untuk informasi lebih lanjut, lihat bagian "Berikan izin kepada pengguna" dalam <Kelola Database.
Buat tampilan lintas skema menggunakan SLPM (beta)
Hanya Hologres V1.3.36 dan versi lebih baru yang mendukung pembuatan tampilan lintas skema. Jika versi instance Hologres Anda lebih lama dari V1.3.36, tingkatkan instance Hologres Anda secara manual di Konsol Hologres atau bergabunglah dengan grup DingTalk Hologres untuk mengajukan peningkatan instance. Untuk informasi lebih lanjut tentang cara meningkatkan instance Hologres secara manual, lihat Tingkatkan Instance. Untuk informasi lebih lanjut tentang cara bergabung dengan grup DingTalk Hologres, lihat Dapatkan Dukungan Online untuk Hologres.
Skenario
SLPM mengelola izin pada skema. Dalam beberapa skenario bisnis, Anda mungkin perlu membuat tampilan lintas skema. Misalnya, dalam skenario bisnis tertentu, Anda dapat membuat skema untuk lapisan data termasuk ODS, DWD, DWS, dan ADS dari gudang data, lalu buat tabel di lapisan data tersebut. Namun, terkadang Anda perlu membuat tampilan lintas skema. Misalnya, Anda perlu membuat tampilan ADS menggunakan tabel yang dibuat di lapisan data DWS dan DWD untuk memenuhi kebutuhan bisnis, seperti yang dijelaskan dalam tabel berikut.
Database | Skema | Tabel | Tampilan |
erp_db | ods | orders | Tidak tersedia |
dwd | customer | Tidak tersedia | |
ads | Tidak tersedia | Nama tampilan: customer_total_order_price DDL untuk membuat tampilan: |
Aktifkan fitur pembuatan tampilan lintas skema
Catatan Penggunaan
Secara default, fitur pembuatan tampilan lintas skema dinonaktifkan.
Saat membuat tampilan lintas skema, Anda harus memiliki izin
developerpada skema tempat tampilan tersebut berada dan izin grup penggunavieweratau level lebih tinggi pada tabel yang digunakan dalam skema tersebut.Contohnya, jika Anda ingin menggunakan akun
ads_dev_useruntuk membuat tampilan bernamacustomer_total_order_price_viewdi skema bernamaads, akunads_dev_userharus diberi izindeveloperpada skemaadsdan izin grup penggunavieweratau level lebih tinggi pada skemaodsdandwd.Jika Anda ingin menanyakan tampilan yang dibuat lintas skema, akun yang Anda gunakan harus diberi hanya izin grup pengguna
vieweratau level lebih tinggi pada skema tempat tampilan tersebut berada.Contohnya, jika Anda ingin menggunakan akun
ads_view_useruntuk menanyakan tampilan bernamaads.customer_total_order_price_view, akun tersebut harus diberi hanya izin grup penggunavieweratau level lebih tinggi pada skema bernamaads.Setelah mengaktifkan fitur pembuatan tampilan lintas skema, pemilik tampilan yang dibuat adalah pengguna yang membuat tampilan tersebut. Hanya pemilik tampilan yang dapat memodifikasi atau menghapus tampilan tersebut.
Contohnya, dalam skenario sebelumnya, pemilik tampilan
ads.customer_total_order_price_viewadalah akunads_dev_user. Jika Anda ingin menghapus akunads_dev_userdari database, eksekusi pernyataan SQL berikut untuk mentransfer kepemilikan tampilan. Pastikan akun yang menerima kepemilikan memiliki izin grup penggunavieweratau level lebih tinggi pada skema tabel yang digunakan oleh tampilan dan izindeveloperpada skema tempat tampilan tersebut berada.-- Contoh sintaks call slpm_alter_view_owner('Nama Tampilan', 'ID akun Alibaba Cloud/Alamat email Alibaba Cloud/ID pengguna RAM'); -- Contoh: Transfer kepemilikan tampilan ads.customer_total_order_price_view ke pengguna p4_xxxxx. call slpm_alter_view_owner ('ads.customer_total_order_price_view', 'p4_xxxxx');
Sintaks
Untuk mengaktifkan fitur pembuatan tampilan lintas skema, eksekusi pernyataan SQL berikut sebagai superuser:
call slpm_enable_multi_schema_view();Setelah pernyataan di atas dieksekusi, Anda dapat membuat tampilan lintas skema.
Nonaktifkan fitur pembuatan tampilan lintas skema
Jika Anda tidak lagi memerlukan fitur pembuatan tampilan lintas skema, eksekusi pernyataan SQL berikut untuk menonaktifkan fitur tersebut:
-- Nonaktifkan fitur pembuatan tampilan lintas skema.
call slpm_disable_multi_schema_view();
-- Transfer kepemilikan semua tampilan ke pengembang skema tempat tampilan tersebut berada.
call slpm_migrate();Setelah pernyataan di atas dieksekusi, tampilan yang tidak dibuat lintas skema dapat ditanyakan, kemampuan berbasis SLPM dipulihkan, dan tampilan lintas skema tidak dapat ditanyakan.