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.
Penting
Azure Cosmos DB for PostgreSQL tidak lagi didukung untuk proyek baru. Jangan gunakan layanan ini untuk proyek baru. Sebagai gantinya, gunakan salah satu dari dua layanan ini:
Gunakan Azure Cosmos DB for NoSQL untuk solusi database terdistribusi yang dirancang untuk skenario skala tinggi dengan perjanjian tingkat layanan ketersediaan (SLA) 99,999%, skala otomatis instan, dan failover otomatis di beberapa wilayah.
Gunakan fitur Elastic Clusters dari Azure Database For PostgreSQL untuk PostgreSQL yang dipecah menggunakan ekstensi Citus sumber terbuka.
Kebijakan keamanan tingkat baris PostgreSQL membatasi pengguna mana yang dapat mengubah atau mengakses baris tabel tertentu. Keamanan tingkat baris dapat sangat berguna dalam kluster multi-penyewa. Ini memungkinkan penyewa individu untuk memiliki akses SQL penuh ke database sambil menyembunyikan informasi masing-masing penyewa dari penyewa lain.
Penerapan pada aplikasi multi-tenant
Kita dapat menerapkan pemisahan data penyewa dengan menggunakan konvensi penamaan untuk peran-peran basis data yang terkait dengan kebijakan keamanan tingkat baris tabel. Kami akan menetapkan peran database kepada setiap penyewa dalam urutan bernomor: tenant1, , tenant2dll. Penyewa akan terhubung ke Azure Cosmos DB for PostgreSQL menggunakan peran terpisah ini. Kebijakan keamanan tingkat baris dapat membandingkan nama peran dengan nilai di tenant_id kolom distribusi untuk memutuskan apakah akan mengizinkan akses.
Berikut cara menerapkan pendekatan tersebut pada tabel peristiwa yang disederhanakan yang didistribusikan oleh tenant_id. Pertama buat perantenant1 dan tenant2. Kemudian jalankan perintah SQL berikut sebagai pengguna administrator citus:
CREATE TABLE events(
tenant_id int,
id int,
type text
);
SELECT create_distributed_table('events','tenant_id');
INSERT INTO events VALUES (1,1,'foo'), (2,2,'bar');
-- assumes that roles tenant1 and tenant2 exist
GRANT select, update, insert, delete
ON events TO tenant1, tenant2;
Saat ini, siapa pun dengan izin terpilih untuk tabel ini dapat melihat kedua baris. Pengguna dari penyewa mana pun dapat melihat dan memperbarui kolom penyewa lain. Kita dapat menyelesaikan kebocoran data dengan kebijakan keamanan tabel tingkat baris.
Setiap kebijakan terdiri dari dua klausul: MENGGUNAKAN dan DENGAN PEMERIKSAAN. Saat pengguna mencoba membaca atau menulis baris, database mengevaluasi setiap baris terhadap klausul ini. PostgreSQL memeriksa baris tabel yang sudah ada berdasarkan ekspresi yang ditentukan dalam klausa USING, dan memeriksa baris yang akan tercipta melalui operasi INSERT atau UPDATE sesuai dengan klausa WITH CHECK.
-- first a policy for the system admin "citus" user
CREATE POLICY admin_all ON events
TO citus -- apply to this role
USING (true) -- read any existing row
WITH CHECK (true); -- insert or update any row
-- next a policy which allows role "tenant<n>" to
-- access rows where tenant_id = <n>
CREATE POLICY user_mod ON events
USING (current_user = 'tenant' || tenant_id::text);
-- lack of CHECK means same condition as USING
-- enforce the policies
ALTER TABLE events ENABLE ROW LEVEL SECURITY;
Sekarang peran tenant1 dan tenant2 mendapatkan hasil yang berbeda untuk kueri mereka:
Tersambung sebagai penyewa1:
SELECT * FROM events;
┌───────────┬────┬──────┐
│ tenant_id │ id │ type │
├───────────┼────┼──────┤
│ 1 │ 1 │ foo │
└───────────┴────┴──────┘
Tersambung sebagai tenant2:
SELECT * FROM events;
┌───────────┬────┬──────┐
│ tenant_id │ id │ type │
├───────────┼────┼──────┤
│ 2 │ 2 │ bar │
└───────────┴────┴──────┘
INSERT INTO events VALUES (3,3,'surprise');
/*
ERROR: new row violates row-level security policy for table "events_102055"
*/
Langkah berikutnya
- Pelajari cara membuat peran dalam kluster.
- Lihat konsep keamanan di Azure Cosmos DB for PostgreSQL