Hologres menyediakan tiga model izin: model otorisasi PostgreSQL standar, Simple Privilege Model (SPM), dan Schema-Level Privilege Model (SLPM). Anda dapat memilih model yang paling sesuai dengan kebutuhan bisnis Anda. Namun, mungkin ada situasi di mana Anda perlu beralih antar model izin untuk instance Hologres Anda. Bagian ini menjelaskan cara melakukan transisi antar model izin.
Periksa model izin dari sebuah database
Anda dapat menggunakan salah satu metode berikut untuk memeriksa model izin dari sebuah database:
Gunakan Konsol HoloWeb
Periksa model izin dari sebuah database pada halaman Database Authorization di tab Security Center di konsol HoloWeb. Untuk informasi lebih lanjut, lihat Kelola Database.
Gunakan Pernyataan SQL
Eksekusi salah satu pernyataan berikut untuk memeriksa apakah SPM atau SLPM diaktifkan pada database:
--Periksa apakah SPM diaktifkan. show hg_experimental_enable_spm; --Periksa apakah SLPM diaktifkan. show hg_enable_slpm;
Beralih dari SPM ke model otorisasi PostgreSQL standar
Catatan Penggunaan
SPM hanya dapat dinonaktifkan oleh superuser untuk sebuah database.
Setelah SPM dinonaktifkan, grup PUBLIC diberikan izin USAGE dan CREATE pada skema public dari database tersebut.
Setelah SPM dinonaktifkan, grup PUBLIC diberikan izin CONNECT dan TEMPORARY pada database tersebut.
Setelah SPM dinonaktifkan, grup PUBLIC diberikan izin EXECUTE pada fungsi dan prosedur dari database tersebut.
Setelah SPM dinonaktifkan, grup PUBLIC diberikan izin USAGE pada bahasa dan tipe data (termasuk domain) dari database tersebut.
Setelah SPM dinonaktifkan, grup PUBLIC tidak memiliki izin pada objek selain yang disebutkan sebelumnya. Contohnya, grup PUBLIC tidak memiliki izin pada tabel, tampilan, tampilan material, kolom, urutan, pembungkus data asing, server asing, atau skema (tidak termasuk skema public).
Setelah SPM dinonaktifkan, grup <db>_admin, <db>_developer, <db>_writer, dan <db>_viewer memiliki izin sebagai berikut:
<db>_admin: Mempertahankan izin yang diperoleh pada objek yang ada dan tidak memiliki izin pada objek baru.
<db>_developer: Mempertahankan izin yang diperoleh pada objek yang ada dan tidak memiliki izin pada objek baru.
<db>_writer: Mempertahankan izin yang diperoleh pada objek yang ada dan tidak memiliki izin pada objek baru.
<db>_viewer: Mempertahankan izin yang diperoleh pada objek yang ada dan tidak memiliki izin pada objek baru.
Prosedur Beralih dari SPM ke Model Otorisasi PostgreSQL Standar
Eksekusi pernyataan SQL berikut untuk menonaktifkan SPM. Setelah SPM dinonaktifkan, model izin akan beralih ke model otorisasi PostgreSQL standar.
--Nonaktifkan SPM. call spm_disable (); --Opsional. Hapus grup pengguna. call spm_cleanup ('dbname');nullSetelah SPM dinonaktifkan, grup pengguna yang sesuai tidak dihapus. Untuk memudahkan manajemen, kami sarankan agar Anda tidak menghapus grup pengguna. Jika Anda ingin menghapus grup pengguna, pastikan bahwa tidak ada pernyataan SQL yang sedang dieksekusi di database. Jika tidak, grup pengguna mungkin gagal dihapus dan layanan mungkin terpengaruh.
Beralih dari model otorisasi PostgreSQL standar ke SPM
Eksekusi pernyataan berikut untuk beralih dari model otorisasi PostgreSQL standar ke SPM:
--Aktifkan SPM untuk database.
call spm_enable ();
--Pindahkan kepemilikan objek yang ada di database kepada pengembang yang ditentukan dalam SPM.
call spm_migrate ();Jika database telah mengaktifkan SPM dan peran sistem dalam SPM ada, kesalahan ERROR: cannot enable Simple Privilege Model for db=[xxxxxx] because roles conflict dilaporkan. Dalam kasus ini, eksekusi pernyataan berikut untuk mengaktifkan SPM dalam mode pemulihan:
--Aktifkan SPM lagi.
call spm_enable ('t');
--Pindahkan kepemilikan objek yang ada di database kepada pengembang yang ditentukan dalam SPM.
call spm_migrate ();Jika kepemilikan objek yang ada di database tidak sepenuhnya dipindahkan setelah model izin beralih ke SPM, kesalahan tanpa izin mungkin dilaporkan untuk pengguna baru meskipun pengguna baru memiliki izin yang diperlukan. Anda harus berulang kali mengeksekusi pernyataan call spm_migrate (); sampai kepemilikan semua objek dipindahkan.
Beralih dari SPM ke SLPM
Model izin dari sebuah database tidak dapat langsung beralih dari SPM ke SLPM. Anda harus mengeksekusi pernyataan berikut untuk beralih model izin dari SPM ke model otorisasi PostgreSQL standar dan kemudian dari model otorisasi PostgreSQL standar ke SLPM:
--Nonaktifkan SPM untuk beralih model izin dari SPM ke model otorisasi PostgreSQL standar.
call spm_disable ();
--Hapus peran sistem dalam SPM.
call spm_cleanup ('dbname');
--Aktifkan SLPM.
call slpm_enable ();
--Pindahkan kepemilikan objek yang ada di database kepada pengembang yang ditentukan dalam SLPM. Pernyataan ini harus dieksekusi.
call slpm_migrate ();Jika database telah mengaktifkan SLPM dan peran sistem dalam SLPM ada, kesalahan ERROR: cannot enable Simple Privilege Model for db=[xxxxxx] because roles conflict dilaporkan. Dalam kasus ini, eksekusi pernyataan berikut untuk mengaktifkan SLPM dalam mode pemulihan:
--Nonaktifkan SPM.
call spm_disable ();
--Hapus peran sistem dalam SPM.
call spm_cleanup ('dbname');
--Aktifkan SLPM dalam mode pemulihan.
call slpm_enable ('t');
--Pindahkan kepemilikan objek yang ada di database kepada pengembang yang ditentukan dalam SLPM. Pernyataan ini harus dieksekusi.
call slpm_migrate ();Jika kepemilikan objek yang ada di database tidak sepenuhnya dipindahkan setelah model izin beralih ke SLPM, kesalahan tanpa izin mungkin dilaporkan untuk pengguna baru meskipun pengguna baru memiliki izin yang diperlukan. Anda harus berulang kali mengeksekusi pernyataan call slpm_migrate (); sampai kepemilikan semua objek dipindahkan.
Beralih dari SLPM ke SPM
Model izin dari sebuah database tidak dapat langsung beralih dari SLPM ke SPM. Anda harus mengeksekusi pernyataan berikut untuk beralih model izin dari SLPM ke model otorisasi PostgreSQL standar dan kemudian dari model otorisasi PostgreSQL standar ke SPM:
--Nonaktifkan SLPM.
call slpm_disable ();
--Hapus peran sistem dalam SLPM.
call slpm_cleanup ('dbname');
--Aktifkan SPM untuk database.
call spm_enable ();
--Pindahkan kepemilikan objek yang ada di database kepada pengembang yang ditentukan dalam SPM.
call spm_migrate ();Jika database telah mengaktifkan SPM dan peran sistem dalam SPM ada, kesalahan ERROR: cannot enable Simple Privilege Model for db=[xxxxxx] because roles conflict dilaporkan. Dalam kasus ini, eksekusi pernyataan berikut untuk mengaktifkan SPM dalam mode pemulihan:
--Nonaktifkan SLPM.
call slpm_disable ();
--Hapus peran sistem dalam SLPM.
call slpm_cleanup ('dbname');
--Aktifkan SPM dalam mode pemulihan.
call spm_enable ('t')
--Pindahkan kepemilikan objek yang ada di database kepada pengembang yang ditentukan dalam SPM.
call spm_migrate ();Jika kepemilikan objek yang ada di database tidak sepenuhnya dipindahkan setelah model izin beralih ke SPM, kesalahan tanpa izin mungkin dilaporkan untuk pengguna baru meskipun pengguna baru memiliki izin yang diperlukan. Anda harus berulang kali mengeksekusi pernyataan call spm_migrate (); sampai kepemilikan semua objek dipindahkan.