VPD (DBMS_RLS) ile satır düzeyinde erişim politikası ekle
OracleGüvenlikKomut
-- 1) Predicate donduren policy fonksiyonu:
CREATE OR REPLACE FUNCTION musteri_app.musteri_vpd_fn (
p_schema IN VARCHAR2,
p_object IN VARCHAR2
) RETURN VARCHAR2
AS
BEGIN
-- Sema sahibi tum satirlari gorur (NULL = kisit yok)
IF SYS_CONTEXT('USERENV', 'SESSION_USER') = 'MUSTERI_APP' THEN
RETURN NULL;
END IF;
-- Diger kullanicilar yalniz kendi illerini gorur
RETURN 'il = SYS_CONTEXT(''USERENV'', ''CLIENT_IDENTIFIER'')';
END;
/
-- 2) Politikayi tabloya bagla:
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => 'MUSTERI_APP',
object_name => 'MUSTERI',
policy_name => 'MUSTERI_IL_VPD',
function_schema => 'MUSTERI_APP',
policy_function => 'MUSTERI_VPD_FN',
statement_types => 'SELECT, UPDATE, DELETE',
update_check => TRUE,
policy_type => DBMS_RLS.CONTEXT_SENSITIVE);
END;
/
-- 3) Kontrol:
SELECT object_owner, object_name, policy_name, function,
sel, upd, del, chk_option, enable, policy_type
FROM dba_policies WHERE object_owner = 'MUSTERI_APP';
-- Test (uygulama kullanicisi ile): EXEC DBMS_SESSION.SET_IDENTIFIER('Ankara');
-- 4) Gecici kapat / kaldir:
EXEC DBMS_RLS.ENABLE_POLICY('MUSTERI_APP', 'MUSTERI', 'MUSTERI_IL_VPD', FALSE);
EXEC DBMS_RLS.DROP_POLICY('MUSTERI_APP', 'MUSTERI', 'MUSTERI_IL_VPD');Ne yapar?
Virtual Private Database, tabloya yapılan her SQL'e policy fonksiyonunun döndürdüğü WHERE koşulunu otomatik ekler; aynı tabloya erişen kullanıcılar yalnızca yetkili oldukları satırları görür/değiştirir. update_check=>TRUE, kullanıcının satırı göremeyeceği bir değere güncellemesini engeller.
Ne zaman kullanılır?
Çok kiracılı (multi-tenant) uygulamalarda, bölge/şube bazlı veri izolasyonunda, uygulama koduna dokunmadan satır güvenliği eklemek için.
Dikkat
Enterprise Edition'a dahildir, ek lisans gerekmez. CLIENT_IDENTIFIER istemci tarafından serbestçe set edilebilir; üretimde değeri güvenilir bir package ile set edilen application context (CREATE CONTEXT ... USING) kullan. SYS ve EXEMPT ACCESS POLICY yetkisine sahip kullanıcılar politikayı aşar; Data Pump export'ları da bu yetki yoksa eksik veri çıkarır. Fonksiyondaki hata ORA-28112 ile tüm erişimi keser. policy_type yanlış seçilirse (ör. STATIC) predicate önbelleğe alınır ve yanlış sonuç döner.
İlgili
- TDE keystore oluştur, aç, master key üret ve yedekle (19c+)
- Tablespace'i TDE ile şifrele (yeni ve mevcut tablespace, online/offline)
- Unified Auditing politikası oluştur, koşullu etkinleştir, kayıtları izle, kaldır
- Parola politikası için profile oluştur ve kullanıcıya ata
- Privilege analysis ile kullanılmayan yetkileri tespit et