Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengelola akses ke sumber daya Azure Database for PostgreSQL Anda adalah bagian penting untuk menjaga keamanan dan kepatuhan. Artikel ini menjelaskan cara menggunakan peran PostgreSQL dan fitur Azure untuk mengontrol izin dan menerapkan praktik terbaik untuk manajemen akses.
Manajemen peran
Cara terbaik untuk mengelola izin akses database Azure Database for PostgreSQL dalam skala besar adalah dengan menggunakan konsep peran. Peran dapat berupa pengguna database atau sekelompok pengguna database. Peran dapat memiliki objek database dan menetapkan hak istimewa pada objek tersebut ke peran lain untuk mengontrol siapa yang memiliki akses ke objek mana. Anda dapat memberikan keanggotaan dalam peran ke peran lain, yang memungkinkan peran anggota untuk menggunakan hak istimewa yang ditetapkan ke peran lain. Azure Database for PostgreSQL memungkinkan Anda memberikan izin langsung kepada pengguna database. Sebagai praktik keamanan yang baik, buat peran dengan serangkaian izin tertentu berdasarkan aplikasi minimum dan persyaratan akses. Tetapkan peran yang sesuai untuk setiap pengguna. Gunakan peran untuk menerapkan model hak istimewa paling sedikit untuk mengakses objek database.
Selain peran bawaan yang dibuat PostgreSQL, instans Azure Database for PostgreSQL menyertakan tiga peran default. Anda dapat melihat peran ini dengan menjalankan perintah berikut:
SELECT rolname FROM pg_roles;
Perannya adalah:
azure_pg_adminazuresu- peran administrator
Saat Membuat instans Azure Database for PostgreSQL, Anda memberikan kredensial untuk peran administrator. Gunakan peran administrator ini untuk membuat lebih banyak peran PostgreSQL.
Misalnya, Anda dapat membuat pengguna atau peran bernama demouser.
CREATE USER demouser PASSWORD password123;
Jangan gunakan peran administrator untuk aplikasi.
Di lingkungan PaaS berbasis cloud, akses ke akun superuser Azure Database for PostgreSQL dibatasi untuk mengontrol operasi sarana hanya oleh operator cloud. Oleh karena itu, azure_pg_admin akun ada sebagai akun pseudo-superuser. Peran administrator Anda adalah anggota peran tersebut azure_pg_admin .
Namun, akun admin server bukan bagian azuresu dari peran, yang memiliki hak istimewa superuser dan digunakan untuk melakukan operasi sarana kontrol. Karena layanan ini adalah layanan PaaS terkelola, hanya Microsoft yang merupakan bagian dari peran superuser.
Anda dapat secara berkala mengaudit daftar peran di server Anda.
Misalnya, Anda dapat menyambungkan dengan menggunakan psql klien dan mengkueri pg_roles tabel, yang mencantumkan semua peran bersama dengan hak istimewa seperti membuat peran lain, membuat database, replikasi, dan banyak lagi.
select * from pg_roles where rolname='demouser';
-[ RECORD 1 ]--+---------
rolname | demouser
rolsuper | f
rolinherit | t
rolcreaterole | f
rolcreatedb | f
rolcanlogin | f
rolreplication | f
rolconnlimit | -1
rolpassword | ********
rolvaliduntil |
rolbypassrls | f
rolconfig |
oid | 24827
Penting
Baru-baru ini, Azure Database for PostgreSQL mengaktifkan kemampuan untuk membuat perintah CAST. Untuk menjalankan CREATE pernyataan CAST, pengguna harus menjadi anggota grup azure_pg_admin . Saat ini, Anda tidak dapat menjatuhkan CAST setelah membuatnya.
Azure Database for PostgreSQL hanya mendukung perintah CAST yang menggunakan WITH FUNCTION opsi dan WITH INOUT . Opsi WITHOUT FUNCTION tidak didukung.
Pengelogan audit di Azure Database for PostgreSQL juga tersedia dengan Azure Database for PostgreSQL untuk melacak aktivitas di database Anda.
Mengontrol akses skema
Database yang baru dibuat di Azure Database for PostgreSQL menyertakan serangkaian hak istimewa default dalam skema publik database yang memberi semua pengguna database dan peran kemampuan untuk membuat objek. Untuk membatasi akses pengguna aplikasi dengan lebih baik ke database yang Anda buat di instans Azure Database for PostgreSQL, pertimbangkan untuk mencabut hak istimewa publik default ini. Setelah mencabut hak istimewa ini, berikan hak istimewa tertentu kepada pengguna database secara lebih terperinci. Contohnya:
Cabut hak istimewa buat ke
publicskema daripublicperan untuk mencegah pengguna database aplikasi membuat objek dalam skema publik.REVOKE CREATE ON SCHEMA public FROM PUBLIC;Buat database baru.
CREATE DATABASE Test_db;Cabut semua hak istimewa dari skema PUBLIK pada database baru ini.
REVOKE ALL ON DATABASE Test_db FROM PUBLIC;Buat peran kustom untuk pengguna database aplikasi.
CREATE ROLE Test_db_user;Beri pengguna database dengan peran ini kemampuan untuk menyambungkan ke database.
GRANT CONNECT ON DATABASE Test_db TO Test_db_user; GRANT ALL PRIVILEGES ON DATABASE Test_db TO Test_db_user;Membuat pengguna database.
CREATE USER user1 PASSWORD 'Password_to_change'Tetapkan peran, dengan hak istimewa sambungkan dan pilih, kepada pengguna.
GRANT Test_db_user TO user1;
Dalam contoh ini, pengguna1 dapat terhubung dan memiliki semua hak istimewa dalam database pengujian Test_db, tetapi tidak ada database lain di server. Alih-alih memberikan pengguna atau peran ini SEMUA HAK ISTIMEWA pada database tersebut dan objeknya, pertimbangkan untuk memberikan izin yang lebih selektif, seperti SELECT, , INSERTEXECUTE, dan lainnya. Untuk informasi selengkapnya tentang hak istimewa dalam database PostgreSQL, lihat perintah GRANT dan REVOKE di dokumen PostgreSQL.
Perubahan kepemilikan skema publik di Azure Database for PostgreSQL
Di PostgreSQL 15 dan yang lebih baru, kepemilikan skema publik berubah menjadi peran baru pg_database_owner , yang memungkinkan pemilik database untuk mengontrolnya. Untuk informasi selengkapnya, lihat catatan rilis PostgreSQL.
Namun, di Azure Database for PostgreSQL, perubahan ini tidak berlaku. Skema publik dimiliki oleh peran di azure_pg_admin semua versi PostgreSQL yang didukung. Perilaku layanan terkelola ini memberikan keamanan dan konsistensi.
Perubahan PostgreSQL 16 dengan keamanan berbasis peran
Di PostgreSQL, peran database dapat memiliki banyak atribut yang menentukan hak istimewanya. Salah satu atribut tersebut adalah atribut CREATEROLE, yang penting untuk manajemen database PostgreSQL pengguna dan peran. Di PostgreSQL 16, perubahan signifikan diperkenalkan pada atribut ini.
Di PostgreSQL 16, pengguna dengan atribut CREATEROLE tidak lagi memiliki kemampuan untuk membagikan keanggotaan dalam peran apa pun kepada siapa pun. Sebaliknya, seperti pengguna lain tanpa atribut ini, mereka hanya dapat membagikan keanggotaan dalam peran yang mereka miliki ADMIN OPTION. Selain itu, di PostgreSQL 16, atribut CREATEROLE masih memungkinkan nonsuperuser kemampuan untuk memprovisikan pengguna baru. Namun, mereka hanya dapat menjatuhkan pengguna yang mereka buat sendiri. Upaya untuk menghilangkan pengguna mengakibatkan kesalahan ketika pengguna tidak dibuat oleh pengguna dengan atribut CREATEROLE .
PostgreSQL 16 juga memperkenalkan peran bawaan baru dan yang ditingkatkan. Peran pg_create_subscription memungkinkan superuser untuk membuat langganan.
Di server Fleksibel Azure Database for PostgreSQL, peran azure_pg_admin adalah peran yang dikelola sistem, dibatasi dan tidak dapat dimodifikasi oleh pengguna. Upaya untuk mengubahnya, seperti memberikan peran lain padanya , akan mengakibatkan kesalahan seperti:
GRANT <db_user> TO azure_pg_admin;
ERROR: permission denied to alter restricted role "azure_pg_admin"
Ini adalah perlindungan bawaan untuk mencegah perubahan pada peran administratif penting. Jika Anda perlu menetapkan hak istimewa atau peran, pertimbangkan untuk membuat peran kustom sebagai gantinya dan memberikan izin yang diperlukan untuk peran tersebut.
Kontrol yang ditingkatkan untuk azure_pg_admin
Di PostgreSQL 16, struktur hierarki peran yang ketat diterapkan untuk pengguna dengan hak istimewa CREATEROLE , khususnya terkait dengan peran pemberian. Untuk meningkatkan fleksibilitas administratif dan mengatasi batasan yang diperkenalkan di PostgreSQL 16, Azure Database for PostgreSQL meningkatkan kemampuan peran azure_pg_admin di semua versi PostgreSQL. Dengan pembaruan ini, anggota peran azure_pg_admin dapat mengelola peran dan mengakses objek yang dimiliki oleh peran yang tidak terbatas, bahkan jika peran tersebut juga merupakan anggota azure_pg_admin. Peningkatan ini memastikan bahwa pengguna administratif mempertahankan kontrol yang konsisten dan komprehensif atas peran dan manajemen izin, memberikan pengalaman yang mulus dan andal tanpa memerlukan akses superuser.
Penting
Azure Database for PostgreSQL tidak mengizinkan pengguna untuk diberikan atribut pg_write_all_data , yang memungkinkan pengguna untuk menulis semua data (tabel, tampilan, urutan), seolah-olah memiliki INSERT, UPDATE, dan DELETE hak pada objek tersebut, dan hak PENGGUNAAN pada semua skema, bahkan tanpa diberikan secara eksplisit. Sebagai solusi disarankan untuk memberikan izin serupa pada tingkat yang lebih terbatas per database dan objek.
Keamanan tingkat baris
Keamanan tingkat baris (RLS) adalah fitur keamanan Azure Database for PostgreSQL yang memungkinkan administrator database menentukan kebijakan yang mengontrol bagaimana baris tertentu data ditampilkan dan beroperasi untuk satu atau beberapa peran. Keamanan tingkat baris menambahkan filter tambahan ke tabel database Azure Database for PostgreSQL. Saat pengguna mencoba melakukan tindakan pada tabel, filter ini diterapkan sebelum kriteria kueri atau pemfilteran lainnya, dan data menyempit atau menolak sesuai dengan kebijakan keamanan Anda. Anda dapat membuat kebijakan keamanan tingkat baris untuk perintah tertentu seperti SELECT, , INSERT, UPDATEdan DELETE, atau menentukannya untuk semua perintah. Kasus penggunaan untuk keamanan tingkat baris termasuk implementasi yang mematuhi PCI, lingkungan rahasia, dan hosting bersama atau aplikasi multipenyewa.
Hanya pengguna dengan SET ROW SECURITY hak yang dapat menerapkan hak keamanan baris ke tabel. Pemilik tabel dapat mengatur keamanan baris pada tabel. Seperti OVERRIDE ROW SECURITY, hak ini saat ini adalah hak implisit. Keamanan tingkat baris tidak mengambil alih izin yang ada GRANT . Ini menambahkan tingkat kontrol yang lebih halus. Misalnya, pengaturan ROW SECURITY FOR SELECT untuk mengizinkan pengguna tertentu mengakses baris hanya memberikan akses pengguna tersebut jika pengguna juga memiliki SELECT hak istimewa pada kolom atau tabel yang dimaksud.
Contoh berikut menunjukkan cara membuat kebijakan yang memastikan hanya anggota peranmanajer yang dibuat khusus yang hanya dapat mengakses baris untuk akun tertentu. Kode dalam contoh berikut dibagikan dalam dokumentasi PostgreSQL.
CREATE TABLE accounts (manager text, company text, contact_email text);
ALTER TABLE accounts ENABLE ROW LEVEL SECURITY;
CREATE POLICY account_managers ON accounts TO managers
USING (manager = current_user);
Klausul secara USING implisit menambahkan klausul WITH CHECK , memastikan bahwa anggota peran manajer tidak dapat melakukan SELECToperasi , , DELETEatau UPDATE pada baris milik manajer lain, dan tidak INSERT dapat baris baru milik manajer lain.
Anda dapat menghilangkan kebijakan keamanan baris dengan menggunakan perintah , seperti yang DROP POLICY ditunjukkan dalam contoh ini:
DROP POLICY account_managers ON accounts;
Meskipun Anda mungkin menghilangkan kebijakan, manajer peran masih tidak dapat melihat data apa pun yang termasuk dalam manajer lain. Pembatasan ini ada karena kebijakan keamanan tingkat baris masih diaktifkan pada tabel akun. Jika keamanan tingkat baris diaktifkan secara default, PostgreSQL menggunakan kebijakan penolakan default.
Anda dapat menonaktifkan keamanan tingkat baris, seperti yang ditunjukkan dalam contoh berikut:
ALTER TABLE accounts DISABLE ROW LEVEL SECURITY;
Melewati keamanan tingkat baris
PostgreSQL memiliki izin BYPASSRLS dan NOBYPASSRLS , yang dapat Anda tetapkan ke peran. NOBYPASSRLS ditetapkan secara default. Dengan server yang baru disediakan di Azure Database for PostgreSQL, melewati hak istimewa keamanan tingkat baris (BYPASSRLS) diimplementasikan sebagai berikut:
Untuk server postgres 16 dan versi yang lebih baru, kami mengikuti perilaku PostgreSQL 16 standar. Pengguna nonadministratif yang dibuat oleh peran administrator azure_pg_admin memungkinkan Anda membuat peran dengan atribut ATAU hak istimewa BYPASSRLS seperlunya.
Untuk Postgres 15 dan server versi sebelumnya, Anda dapat menggunakan pengguna azure_pg_admin untuk melakukan tugas administratif yang memerlukan hak istimewa BYPASSRLS. Namun, Anda tidak dapat membuat pengguna nonadmin dengan hak istimewa BypassRLS, karena peran administrator tidak memiliki hak istimewa superuser, seperti umum dalam layanan PaaS PostgreSQL berbasis cloud.