Oracle Virtual Private Database

Değerli Dostlar,

Biz veri tabanı yöneticileri olarak bazı durumlarda veri tabanı içerisindeki bazı bilgilerin görülmemesini yada maskelenmesini isteyebiliriz. Bu tip durumlar için güvenlik politikaları oluşturmamız gerektiğinde farklı alternatifler olsada bugün sizlere Oracle tarafından sunulan ” Virtual Private Database ” özelliğini tanıtacağım.

Virtual Private Database ile farklı güvenlik politikaları ile belirlenen kullanıcılara satır ve sütün bazında verileri gizleyebilir ayrıca insert , update , delete gibi komutlara kısıtlamalar getirebilirsiniz. Özellikle kullanıcı bazında hızlıca işimizi çözen bu özellik sayesinde nispeten KVKK konusunda da çözümler oluşturabilirsiniz.

Oracle Virtual Private kural yapısını oluşturmak için öncelikle bir fonksiyona gereksinim duyacağız. Ben senaryomuzda Oracle Database üzerinde test amaçlı gelen HR şemasını kullanacağım. Fonksiyonumuzun adı POL_MAAS_GIZLE olacak.

CREATE OR REPLACE FUNCTION SYSTEM.POL_MAAS_GIZLE (v_SchemaName   IN VARCHAR2,
                                                  v_ObjectName   IN VARCHAR2)
    RETURN VARCHAR2
AS
    condition   VARCHAR2 (200);
BEGIN
    condition := 'JOB_ID = ''AD_VP123''';
    RETURN (condition);
END POL_MAAS_GIZLE;
/

Fonksiyonumuz başarılı bir şekilde oluştu. Bir kontrol edelim.

SELECT * FROM DBA_POLICIES WHERE POLICY_NAME='POL_MAAS_GIZLE';

Şimdi kuralımızı oluşturuyoruz. Kuralımızda , HR şemasındaki EMPLOYESS tablosunun içerisinde bulunan maaş yani SALARY sütununu gizleyeceğiz. Sorgu çalıştığında bize NULL bir değer dönecek. Bu değer INTEGER döndüğü için yerine başka birşey yazamıyorsunuz.

BEGIN
    DBMS_RLS.ADD_POLICY (object_schema       => 'HR',
                         object_name         => 'EMPLOYEES',
                         policy_name         => 'POL_MAAS_GIZLE',
                         function_schema     => 'SYSTEM',
                         policy_function     => 'POL_MAAS_GIZLE',
                         statement_types     => 'SELECT',
                         policy_type         => DBMS_RLS.SHARED_STATIC,
                         sec_relevant_cols       => 'SALARY',
                         sec_relevant_cols_opt   => DBMS_RLS.ALL_ROWS);

END;
/

Oracle Virtual Private database için bir kural oluşturduğunuzda bu SYS ve SYSTEM gibi sistem için oluşturulan bütün kullanıcılara etki eder. Eğer VPD kuralınına takılmamasını istediğiniz bir kullanıcı varsa GRANT ile belirtmeniz gerekir.

-- Bir kullanıcıyı VPD dışında tutmak için
SQL\> GRANT EXEMPT ACCESS POLICY TO USR_ABUZER;

Tekrar Select çekiyoruz. Gördüğünüz gibi maaş kolunu ortaya çıktı.

Tekrar görünmemesini isterseniz,

REVOKE EXEMPT ACCESS POLICY FROM USR_ABUZER;

Eğer kısıtlamayı genişletmek isterseniz şema, tablo ve sorguya ” , ” koyarak genişletebilirsiniz. Örneğin “EMAIL ” kısmı görünmesin. Derseniz ” sec_relevant_cols_opt ” alanına ekleme yapmanız gerekir.

BEGIN
    DBMS_RLS.ADD_POLICY (object_schema       => 'HR',
                         object_name         => 'EMPLOYEES',
                         policy_name         => 'POL_MAAS_GIZLE',
                         function_schema     => 'SYSTEM',
                         policy_function     => 'POL_MAAS_GIZLE',
                         statement_types     => 'SELECT',
                         policy_type         => DBMS_RLS.SHARED_STATIC,
                         sec_relevant_cols       => 'SALARY,EMAIL',
                         sec_relevant_cols_opt   => DBMS_RLS.ALL_ROWS);

END;
/

Oracle Virtual Private Database özelliği ile verilerimizi basitçe maskeledik. Peki yazdığınız bir kuralı silmek isterseniz .

BEGIN
    DBMS_RLS.DROP_POLICY (object_schema   => 'HR',
                          object_name     => 'EMPLOYEES',
                          policy_name     => 'POL_MAAS_GIZLE');
END;
/

Daha detaylı bilgi için aşağıdaki adresi ziyaret edebilirsiniz. Diğer yazılarımızda görüşmek üzere.

Oracle VPD

Exit mobile version