Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
PostgreSQL için Azure Cosmos DB artık yeni projeler için desteklenmemektedir. Bu hizmeti yeni projeler için kullanmayın. Bunun yerine, şu iki hizmetlerden birini kullanın:
99,999% kullanılabilirlik hizmet düzeyi sözleşmesi (SLA), anında otomatik ölçeklendirme ve birden çok bölgede otomatik yük devretme ile yüksek ölçekli senaryolar için tasarlanmış dağıtılmış bir veritabanı çözümü için NoSQL için Azure Cosmos DB kullanın.
Açık kaynak Citus uzantısını kullanarak bölümlenmiş Azure Veritabanı'nın PostgreSQL için Elastik Kümeler özelliğini kullanın.
PostgreSQL satır düzeyi güvenlik ilkeleri , hangi kullanıcıların hangi tablo satırlarını değiştirebileceğini veya hangi satırlara erişebileceğini kısıtlar. Satır düzeyi güvenlik özellikle çok kiracılı bir kümede yararlı olabilir. Tek tek kiracıların veritabanına tam SQL erişimine sahip olmasını sağlarken, her kiracının bilgilerini diğer kiracılardan gizler.
Çok kiracılı uygulamalar için uygulama gerçekleştirmek
Tablo satır düzeyi güvenlik ilkelerine bağlı veritabanı rolleri için bir adlandırma kuralı kullanarak kiracı verilerinin ayrımını uygulayabiliriz. Her kiracıya numaralandırılmış bir sırayla bir veritabanı rolü atayacağız: tenant1, tenant2vb. Kiracılar bu ayrı rolleri kullanarak PostgreSQL için Azure Cosmos DB'ye bağlanır. Satır düzeyi güvenlik ilkeleri, erişime izin verilip verilmeyeceğine karar vermek için rol adını dağıtım sütunundaki tenant_id değerlerle karşılaştırabilir.
tarafından dağıtılan basitleştirilmiş olaylar tablosuna yaklaşımın nasıl uygulanacağı aşağıda açıklanmıştır tenant_id. İlk olarak tenant1 oluşturun. Ardından aşağıdaki SQL komutlarını yönetici kullanıcı olarak citus çalıştırın:
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;
Bu tablo için belirli izinlere sahip olan herkes her iki satırı da görebilir. İki kiracıdan herhangi birinin kullanıcısı, diğer kiracının satırını görebilir ve güncelleyebilir. Satır düzeyi tablo güvenlik ilkeleriyle veri sızıntısını çözebiliriz.
Her ilke iki yan tümceden oluşur: USING ve WITH CHECK. Kullanıcı satırları okumaya veya yazmaya çalıştığında, veritabanı her satırı bu yan tümcelere göre değerlendirir. PostgreSQL, var olan tablo satırlarını USING yan tümcesinde belirtilen ifadeyle ve INSERT veya UPDATE yoluyla oluşturulacak satırları WITH CHECK yan tümcesine göre denetler.
-- 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;
Artık tenant1 ve tenant2 rolleri sorguları için farklı sonuçlar alıyor.
Kiracı olarak bağlandı1:
SELECT * FROM events;
┌───────────┬────┬──────┐
│ tenant_id │ id │ type │
├───────────┼────┼──────┤
│ 1 │ 1 │ foo │
└───────────┴────┴──────┘
Kiracı2 olarak bağlandı:
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"
*/
Sonraki adımlar
- Bir kümede rol oluşturmayı öğrenin.
- PostgreSQL için Azure Cosmos DB'de güvenlik kavramlarına göz atın