Oracle Data Redaction ile veri güvenliği
Oracle Advanced Security lisansı ile kullanılabilen , Oracle Data Redaction, uygulamalar tarafından verilen sorgulardan döndürülen verileri maskelemenizi (redakt etmenizi) sağlar. Aşağıdaki yöntemlerden birini kullanarak sütun verilerini redaksiyon yapabilirsiniz:
1- Tam Redaksiyon (Full redaction) :
Sütun verilerinin tüm içeriğini çıkarırsınız. Sorgu uygulaması kullanıcısına döndürülen redaksiyon değeri, sütunun veri türüne bağlıdır. Örneğin, NUMBER veri türünün sütunları sıfır (0) ile ve karakter veri türleri tek bir boşlukla yeniden düzenlenir.
Tam redaksiyon varsayılandır ve bir Veri Redaksiyon politikası sütunu belirttiğinde ancak function_type parametre ayarını atladığında kullanılır. DBMS_REDACT.ADD_POLICY prosedürünü çalıştırdığınızda, tam redaksiyon için function_type parametre ayarını ayarlamak için, aşağıdaki ayarı girersiniz:
function_type => DBMS_REDACT.FULL
Tam redaksiyon çıktısını farklı değerlere değiştirmek için DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES prosedürünü kullanabilirsiniz.
2- Kısmi Redaksiyon (Partial redaction) :
Sütun verilerinin bir bölümünü çıkarırsınız. Örneğin, TC Kimlik numarasının son 4 rakam dışındakiler için yıldız işaretli (*) çıkartabilirsiniz.
Kısmi redaksiyonu belirtmek için, DBMS_REDACT.ADD_POLICY prosedür function_type parametresini DBMS_REDACT.PARTIAL olarak ayarlamanız ve kısmi redaksiyon davranışını tanımlamak için function_parameters parametresini kullanmanız gerekir.
Kısmi veri redaksiyonu için görüntülenen çıktı aşağıdaki gibi olabilir:
Karakter Veri Türleri :
XXX-XX-4320 şeklinde gösterim için function_parameters => DBMS_REDACT.REDACT_US_SSN_F5 şeklinde olmalıdır.
***-**-4320 şeklinde gösterim için function_parameters => ‘VVVFVVFVVVV,VVV-VV-VVVV,*,1,5’ şeklinde olmalıdır.
Sayı Veri Türleri :
XXXXX4328 şeklinde gösterim için function_parameters => DBMS_REDACT.REDACT_NUM_US_SSN_F5 şeklinde olmalıdır.
999994328 şeklinde gösterim için function_parameters => ‘9,1,5’ şeklinde olmalıdır.
Tarih-saat Veri Türleri:
02-AUG-11 10.20.50.000000 AM şeklinde gösterim için function_parameters => ‘Md02YHMS’ şeklinde olmalıdır.
29-DEC-11 10.20.50.000000 AM şeklinde gösterim için function_parameters => ‘m12DYHMS’ şeklinde olmalıdır.
3- Düzenli ifadeler (Regular expressions):
Düzeltilecek veri kalıplarını aramak için normal ifadeler kullanabilir. Örneğin, değişen karakter uzunluklarına sahip olabilen e-posta adreslerini çıkarmak için normal ifadeler kullanabilirsiniz. Yalnızca karakter verileriyle kullanılmak üzere tasarlanmıştır.
Bir model aramasına dayalı olarak, bir sütun veri değeri içindeki belirli verileri çıkarmak için normal ifadeler kullanabilirsiniz. Örneğin, e-posta adreslerinin kullanıcı adını, yalnızca etki alanı gösterilecek şekilde düzenleyebilirsiniz (örneğin, destek@veritabani.gen.tr e-posta adresindeki destek bölümünü [redacted] ile değiştirerek [redacted] @ veritabani.gen.tr olarak görünmesini sağlayabilirsiniz. ). Redaksiyonu gerçekleştirmek için, DBMS_REDACT.ADD_POLICY prosedüründeki function_type parametresini DBMS_REDACT.REGEXP olarak ayarlayın ve ardından normal ifadeyi oluşturmak için aşağıdaki parametreleri kullanabilirsiniz :
- Veri içindeki aranacak ifade
regexp_pattern => ‘(.+)@(.+\.[A-Za-z]{2,4})’ - regexp_pattern ayarı ile eşleşen değerin yerini alacak ifade
regexp_replace_string => ‘[redacted]@\2’ - Dize arama dizesi için başlangıç konumu
regexp_position => DBMS_REDACT.RE_BEGINNING (ilk karakter ise) - Gerçekleştirilecek arama ve değiştirme işleminin türü
regexp_occurrence => DBMS_REDACT.RE_ALL - Arama ve değiştirme işlemi için varsayılan eşleştirme davranışı
regexp_match_parameter => ‘i (i ifadesi büyük / küçük harfe duyarlı olmayacak şekilde ayarlar)
4- Rastgele Redaksiyon (Random redaction):
Uygulama kullanıcısı düzenlenmiş verileri sorguladığında her seferinde , verinin tipine bağlı olarak , rastgele oluşturulmuş değerler gösterilir.
Rastgele değerler için görüntülenen çıktı, redakte edilen sütunun veri türüne göre aşağıdaki gibi değişir:
-Karakter veri türleri: Rastgele çıktı, karakterlerin bir karışımıdır (örneğin, XYZ[P{\pjkQWcM). CHAR ve VARCHAR2 veri türleri için farklı davranır.
-Sayı veri türleri: Her gerçek sayı değeri, gerçek verilerin mutlak değeri olan rastgele, negatif olmayan bir sayı ile değiştirilerek yeniden düzenlenir. Bu redaksiyon, gerçek verilerin kesinliğini aşmayan rastgele sayılarla sonuçlanır. Örneğin, 987654321 numarası 12345678, 13579, 0 veya 987654320 sayılarından herhangi biriyle değiştirilerek redakte edilebilir ancak 987654321, 99987654321 veya -1 sayılarından herhangi biriyle değiştirilemez. -123 sayısı 122, 0 veya 83 ile değiştirilerek redakte edilebilir, ancak 123, 1123 veya -2 sayılarından herhangi biriyle değiştirilemez.
-Tarih-saat veri türleri: Tarih veri türünün değerleri rastgele Veri Redaksiyonu kullanılarak redaksiyona tabi tutulduğunda, Oracle Veritabanı bunları gerçek verilerden her zaman farklı olan rastgele tarihlerle görüntüler.
Rastgele redaksiyon kullanma ayarı aşağıdaki gibidir:
function_type => DBMS_REDACT.RANDOM
5- Redaksiyon Yok (No redaction):
Tanımlanmış politikaların bulunduğu tablolara karşı sorguların sonuçları üzerinde hiçbir etkisi olmaksızın redaksiyon politikalarınızın dahili işleyişini test etmenizi sağlar. Bu seçeneği, redaksiyon ilkesi tanımlarını bir üretim ortamına uygulamadan önce test etmek için kullanabilirsiniz.
Redaksiyon yapmayan bir Veri Redaksiyon politikası oluşturabilirsiniz. Bu, düzeltilmiş bir temel tablonuzun olduğu, ancak belirli bir uygulama kullanıcısının her zaman gerçek verileri gösteren bir görünüme sahip olmasını istediğiniz durumlarda kullanışlıdır. Redaksiyonu yapılmış tablonun yeni bir görünümünü oluşturabilir ve ardından bu görünüm için bir Veri Redaksiyon politikası tanımlayabilirsiniz. Politika, temel tabloda hala mevcuttur, ancak function_type ayarı DBMS_REDACT.NONE olan bir politika oluşturmak için kullanıldığı sürece, uygulama görünümü kullanarak sorguladığında hiçbir düzeltme yapılmaz.
6- NULL değer dönderen Redaksiyon (NULLIFY redaction):
Tablo veya görünüm sütununun görüntülenen değeri için boş değerler döndüren Oracle Data Redaction ilkeleri oluşturabilirsiniz. function_type parametre değeri için DBMS_REDACT.NULLIFY ayarlandığında bir sütundaki tüm verileri çıkarır ve boş değerlerle değiştirir.
DBMS_REDACT.ADD_POLICY prosedürü, tam redaksiyon gerçekleştiren ve redaksiyonu yapılan sütunlar için boş değerler görüntüleyen bir redaksiyon politikası oluşturabilir.
Bu işlev türünü DBMS_REDACT.FULL işlev türünün desteklediği tüm desteklenen sütun türlerinde kullanabilirsiniz. Ayrıca CLOB ve NCLOB veri türlerini de destekler. DBMS_REDACT.NULLIFY işlevini kullanmak için, önce COMPATIBLE parametresi minimumda 12.2.0.0.0 olarak ayarlanmalıdır.
DBMS_REDACT.NULLIFY işlve türündeki bir politika aşağıdaki gibi oluşturulabilir :
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => 'hr',
object_name => 'employees',
column_name => 'commission_pct',
policy_name => 'nullify_com_pct',
function_type => DBMS_REDACT.NULLIFY,
expression => '1=1');
END;
/
Oracle Veri Redaksiyonu Ne Zaman Kullanılmalı
Oracle Data Redaction’ı, uygulama yazılımlarınızın ve uygulama kullanıcılarınızın erişmesi gereken hassas verileri gizlemeniz gerektiğinde kullanın. Veri Redaksiyonu, verileri birkaç farklı redaksiyon stilini kullanarak kolayca gizlemenizi sağlar.
Oracle Data Redaction, belirli uygulama kullanıcılarına döndürülen Kişisel Olarak Tanımlanabilir Bilgilerin sonuç sorguları kümesinden belirli karakterleri çıkarmanız gereken durumlar için idealdir. Örneğin, 4321 sayılarıyla biten bir TC kimlik numarasını *******4321 olarak sunmak isteyebilirsiniz.
Oracle Data Redaction, özellikle çağrı merkezi uygulamaları ve salt okunur olan diğer uygulamalar için uygundur. Oracle Data Redaction’ı veritabanına geri güncelleme yapan uygulamalarla kullanırken dikkatli olun, çünkü redaksiyonu yapılan veriler bu veritabanına geri yazılabilir.
Oracle Veri Redaksiyonunu Kullanmanın Yararları
Verilerinizi korumak için Oracle Data Redaction kullanmanın avantajları aşağıdaki gibidir:
- Aralarından seçim yapabileceğiniz farklı redaksiyon stillerine sahip olursunuz.
- Veriler çalışma zamanında redaksiyona tabi tutulduğundan, Veri Redaksiyonu verilerin sürekli değiştiği ortamlara çok uygundur.
- Veri Redaksiyon politikalarını tek bir merkezi konumda oluşturabilir ve buradan kolayca yönetebilirsiniz.
- Veri Redaksiyon politikaları, uygulama kullanıcısının sorgusunun sonuçlarına Veri Redaksiyon politikalarının ne zaman uygulanacağına karar vermek için çalışma zamanında kullanılabilen SYS_CONTEXT değerlerine dayalı çok çeşitli işlev koşulları oluşturmanıza olanak tanır.
Ad Hoc Veritabanı Sorguları ile Oracle Veri Redaksiyonunu Kullanırken Dikkat Edilmesi Gerekenler
Veritabanı kullanıcıları tarafından gerçekleştirilen ad hoc sorgular için hassas verileri çıkarmanın uygun olduğu durumlarla karşılaşabilirsiniz. Örneğin, bir üretim uygulamasını destekleme sürecinde, bir kullanıcının uygulamayla ilgili acil bir sorunu gidermek ve düzeltmek için geçici veritabanı sorguları çalıştırması gerekebilir.
Oracle Data Redaction, doğrudan veritabanına karşı geçici sorgular çalıştıran veritabanı kullanıcılarına verinin maruz kalmasını önlemek için tasarlanmamış olsa da, verilerin yanlışlıkla ifşa olma olasılığını azaltmak için ek bir katman sağlayabilir. Bu tür kullanıcılar verileri değiştirme, veritabanı şemasını değiştirme ve SQL sorgu arayüzünü tamamen atlatma haklarına sahip olabileceğinden, kötü niyetli bir kullanıcının belirli durumlarda Veri Redaksiyon politikalarını atlaması mümkündür.
Oracle Database güvenlik araçlarının genel güvenliği iyileştirmek için birlikte kullanılmak üzere tasarlandığını unutmayın. Oracle Data Redaction’ın tamamlayıcısı olarak bu araçlardan birini veya daha fazlasını dağıtarak, genel güvenlik duruşunuzu güvenli bir şekilde artırabilirsiniz.
Oracle Data Redaction Politikaları
Oracle Data Redaction politikası, bir tablo veya görünüm için redaksiyonun gerçekleşmesi gereken koşulları tanımlar.
Bir Veri Redaksiyon politikası aşağıdaki özelliklere sahiptir:
- Veri Redaksiyon politikası, ne tür bir redaksiyon yapılmalı, redaksiyon nasıl yapılmalı ve redaksiyon ne zaman gerçekleşmeli konularını tanımlar. Oracle Database, redaksiyonu yürütme zamanında, veriler uygulamaya döndürülmeden hemen önce gerçekleştirir.
- Bir Veri Redaksiyon politikası, değerleri tamamen çıkarabilir, değerleri kısmen çıkarabilir veya değerleri rastgele redakt edebilir. Ayrıca, politikalarınızı bir test ortamında test etmek istediğinizde, hiçbir veriyi çıkarmamak için bir Veri Redaksiyon politikası tanımlayabilirsiniz.
- Bir Veri Redaksiyon politikası, farklı uygulama kullanıcılarına, politika ifadesinin DOĞRU veya YANLIŞ döndürmesine bağlı olarak, düzeltilmiş veriler veya gerçek verilerle sunulmasına izin veren bir ilke ifadesiyle tanımlanabilir. Politika ifadesinin değerlendirilmesinin mantıksal sonucu DOĞRU olduğunda düzeltme gerçekleşir. Güvenlik nedenleriyle, politika ifadesinde kullanılabilen işlevler ve operatörler, SYS_CONTEXT ve diğerleri ile sınırlıdır. Kullanıcı tarafından oluşturulan işlevlere izin verilmez. Politika ifadeleri, etkin rolleri kontrol etmek için SYS_CONTEXT işleviyle SYS_SESSION_ROLES ad alanını kullanabilir.
Politikalar DBMS_REDACT paketi ile yönetilebilir. Bu paket içindeki fonksiyonlar şunlardır:
DBMS_REDACT.ADD_POLICY : Tablo veya görünüme politika ekler.
DBMS_REDACT.ALTER_POLICY : Bir politikayı düzenler.
DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES : Belirli bir veri türü için tam redaksiyon değerini global olarak günceller. Güncellenen değerlerin kullanılabilmesi için veritabanı instance’ının yeniden başlatılması gerekir.
DBMS_REDACT.ENABLE_POLICY : Bir politikatı etkinleştirir.
DBMS_REDACT.DISABLE_POLICY : Bir politikanın etkinliğini kaldırır.
DBMS_REDACT.DROP_POLICY : Bir politikayı siler.
DBMS_REDACT.APPLY_POLICY_EXPR_TO_COL : Bir tabloya veya görünüm sütununa bir Veri Redaksiyon ilkesi ifadesi uygular
DBMS_REDACT.CREATE_POLICY_EXPRESSION : Bir Veri Redaksiyon politikası ifadesi oluşturur
DBMS_REDACT.DROP_POLICY_EXPRESSION : Bir Veri Redaksiyon politikası ifadesini siler
DBMS_REDACT.UPDATE_POLICY_EXPRESSION : Bir Veri Redaksiyon politikası ifadesini günceller
SYS ve SYSTEM kullanıcıları için Oracle Data Redaction politikalarının durumu
Hem SYS hem de SYSTEM kullanıcıları otomatik olarak “EXEMPT REDACTION POLICY” sistem ayrıcalığına sahiptir. SYSTEM kullanıcısı EXEMPT REDACTION POLICY sistem ayrıcalığını içeren EXP_FULL_DATABASE rolüne de sahiptir. Bu, SYS ve SYSTEM kullanıcılarının her zaman mevcut Oracle Veri Redaksiyon politikalarını atlayabileceği ve üzerinde Veri Redaksiyon politikaları tanımlanmış tablolardan (veya görünümlerden) gelen verileri her zaman görüntüleyebilecekleri anlamına gelir.
Örnek :
Aşağıdaki örnekte ADURUOZ şemasındaki KISI tablosunundaki TCKIMLIKNO kolonu için eğer bağlanan kullanıcı PROD değilse , Full redaction uygulayan KISI_Redaction isimli bir politika oluşturulmaktadır.
–Politika eklenmesi
BEGIN
DBMS_REDACT.ADD_POLICY (
OBJECT_SCHEMA => 'ADURUOZ',
object_name => 'KISI',
column_name => 'TCKIMLIKNO',
policy_name => 'KISI_Redaction',
function_type => DBMS_REDACT.FULL,
expression => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') != ''PROD'' ');
END;
/
–Politikanın değiştirilmesi (KISI_Redaction politasına TCKIMLIKNO alanı haricinde SICILNO için de düzenleme yapılmasını sağlar)
BEGIN
DBMS_REDACT.ALTER_POLICY(
object_schema => 'ADURUOZ',
object_name => 'KISI',
policy_name => 'KISI_Redaction',
action => DBMS_REDACT.ADD_COLUMN,
column_name => 'SICILNO',
function_type => DBMS_REDACT.FULL);
END;
/
–Politikanın silinmesi
BEGIN
DBMS_REDACT.DROP_POLICY (
OBJECT_SCHEMA => 'ADURUOZ',
object_name => 'KISI',
policy_name => 'KISI_Redaction');
END;
/
Aşağıdaki sorgu ile oluşturulan politaları görüntüleyebilirsiniz.
SQL> SET LINESIZE 200
SQL> COLUMN object_owner FORMAT A20
SQL> COLUMN object_name FORMAT A30
SQL> COLUMN expression FORMAT A30
SQL> SELECT object_owner,object_name,policy_name,expression,enable,policy_description FROM redaction_policies ORDER BY 1, 2, 3;
OBJECT_OWNER OBJECT_NAME POLICY_NAME EXPRESSION ENABLE POLICY_DESCRIPTION
-------------------- ------------------------------ ------------------------------ ---------------------------------------------------- ------- --------------------
ADURUOZ KISI KISI_Redaction SYS_CONTEXT('USERENV', 'SESSION_USER') != 'PROD' YES