Transparent Data Encryption Opsiyonun Kullanımı (11gR2)

Transparent Database Encrytion (TDE) oracle’ ın 10gR2 versiyonu ile tanışmış olduğumuz bir opsiyondur. Temelde database içerisinde store edilen verilenen kolon, tablo veya tablespace bazında şifrelenmek suretiyle verinin istenmeyen kişiler tarafından veriye erişimin önlenerek veri güvenliğinin sağlanmasını amaçlamaktadır.

Öncelikle Oracle’ ın Wallet kullanımı ile ilgili birkaç önerisinden bahsetmek istiyourum. TDE’ i production ortamına implente edecekler için bu önerileri dikkate alarak ilerlemelerinde ciddi fayda olacaktır diye düşünüyorum. Birincisi Wallet nerde saklanacak veya saklanmalı, öncelikle kesinlikle ORACLE_BASE veya ORACLE_HOME altında olmamalıdır, çünkü zaman zaman bu path’ lerin backupı alındığında Walletında backupı alınacağından bu risk oluşturacaktır. Bunun yerine root userı ile farklı bir directory altında bir dizin create edilerek oracle userına yetki verilmesi güvenlik açısından daha faydalı olacaktır. Örneğin;

su – root
cd /etc
mkdir –pv ORACLE/WALLETS/SID
chown –R oracle:oinstall ORACLE
chmod –R 700 ORACLE

wallet ve master key create edildikden aşağıdaki yetkiyide vermeyi unutmayınız;

chmod 600 ewallet.p12

İkinci olarak wallet’ ın passwordunu set ederken minumum 8 karakterden oluşan komplex bir şifre kullanılmasını önermektedir.

Burada hemen bir konuya açıklık getirmekde fayda var, Burada önerilmeyen wallet’ ın backupının database backupı ile aynı yere (aynı storage device’ a veya aynı kartuşa) alınmasıdır yoksa tabiki wallet’ ın backupı mutlaka rutin aralıklarla backuplanmalıdır ama database backupının olduğu yere değil.

Detaylara bakacak olursak;

Bu opsiyonu nasıl kullanmak istediğinizde 2 farklı şekilde sisteminize implemente edebilirsiniz. İlk yöntemimiz Enterprise Manager Konsolu üzerinden TDE’ in create ve configure edilmesi, diğeri ise konsol kullanmadan komutlar üzerinden create edilmesi. İlk yöntemi kullanmak istediğinizde;

Bir diğer kritik nokta wallet create edildikden sonra root veya başka bir user tarafından bilerek veya bilmeyerek bu dosyanın silinmesinin önlenmesidir, bunun içinde aşağıdaki komutu kullanabilirsiniz;

chattr +i ewallet.p12
chattr +i cwallet.p12

bu şekilde dosyanın silinmesinin önüne geçmiş olursunuz. (ewallet.p12 dosyası wallet create edildikden sonra, cwallet.p12 dosyası ise auto-login özelliği enable edildiğinde oluşan dosyadır) yaptığınız değişiklikleri geri almak içinse;

chattr -i ewallet.p12
chattr -i cwallet.p12

komutunu kullanabilirsiniz.

• Sisteme sys ile connect oluyoruz;

• Server tab’ ından Transparent Data Encrytion linkine tıklıyoruz.

• Gelen menüden Create Wallet kısmından önce wallet’ ı create ediyoruz.

• Bir sonraki menüde istenilen bilgiler girilerek devam edilir;

Bu ekrandaki en önemli nokta wallet password’ ünün set edildiği kısımdır. Bu password güvenlik açısından kolay bulunamayacak bir şekilde set edilmelidir. Ayrıca da asla ama asla kaybedilmemesi gereken bir password’ dür. Bununla ilgili oracle’ ın notunu sizlerle paylaşıyor olacağım.

• Bir sonraki ekranda wallet created succesfully mesajını görmemiz gerekiyor.

Artık wallet’ ımız hazır. Wallet Location’I kontrol ettiğimizde ;

Create etmiş olduğu file’ ide görebiliyor olmamız gerekiyor. Eğer bu işlemleri konsol kullanmadan yapmak isteseydik, sqlnet.ora dosyasına aşağıdaki satırları ekleyip ;

ENCRYPTION_WALLET_LOCATION =
(SOURCE = (METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = C:\oracle\wallets)
)
)

Statüsü OPEN olarak set etmek içise;

ALTER SYSTEM SET ENCRYPTION KEY AUTHENTICATED BY oracle;

ALTER SYSTEM SET WALLET OPEN IDENTIFIED BY oracle;

TDE’ yi kullanarak kolon, table veya tablespace’ lerinizi encrypted hale getirebilirsiniz. Bunu yaparken aşağıdaki algoritma birini kullanabilirsiniz. Spesifik bir algoritma belirtmez iseniz default olarak AES192 kullanılacaktır.

– 3DES168
– AES128
– AES192
– AES256

TDE 2 farklı durumda kullanılaibilir. Birimcisi tablonun herhangi bir kolonunu encriyt edilebilir, ikincisi ise tablespace bazında encryption yapılabilir ki o zaman o tablespace’ de store edilen tüm tablolar encrpyt edilmiş olur.

TDE kullanmamın bazı avantajları bulunmaktadır. Özetle ;

• Güvenlik olarak, storage’ in veya datafile’ lerin çalınma ihtimaline karşı datanızın farklı kişiler tarafından kullanılamaz olduğuna emin olursunuz,

• Yasal olarak datanın güvenliğini sağlamanız gerektiği durumlarda TDE size bir çözüm olacaktır,

• Yetkili userların datayının decrypt haline erişmesi için trigger veya viewler create etmek zorunda kalmazsınız.Database userlarınız dataya application üzerinden kolayca erişim sağlayabilirler.

• Database kullanıcılarınız ve uygulamalarınız datanın tablo içerisinde encrypted olarak saklandıklarının farkına bile varmazlar.

• Uygulama tarafında encypt veriyi modify etmek için herhangi bir değişiklik yapılmasına gerek yoktur. Datayı şifreleme ve decypt etme işi veritabanı tarafından otomatik olarak yapılmaktadır.

• Şifre yönetimi işlemleri otomatik olarak yapılır. Kullanıcılar veya uygulama üzerinden şifre işlemlerine müdahalede bulunulamaz.

Wallet’ ımızı create ettiğimize göre kullanımı ile ilgili örneklere geçebiliriz;

Kolon bazında bir encrption yapmak istediğimizde ;

CREATE TABLE KAMIL.COL_ENC_TEST
(
ID VARCHAR2(10 BYTE),
NAME VARCHAR2(10 BYTE),
PASSW VARCHAR2(30 BYTE) ENCRYPT USING ‘AES192’ SALT
)
Table created.

Eğer encrpyt edilmiş bir kolon üzerine index koymak istiyorsanız o zaman o kolonu NO SALT opsiyonu ile encrpt etmeniz gerekmektedir. Defaultu SALT’ dır. Yukarıda ki örnekde PASSW kolonuna index atmaya çalıştığımızda;

SQL> CREATE INDEX KAMIL.indx_passw_1 ON KAMIL.COL_ENC_TEST
(PASSW)
Error at line 1
ORA-28338: Column(s) cannot be both indexed and encrypted with salt
Script Terminated on line 62.

Hatasını alırız. NO SALT ile create edip tekrar deneyelim;

SQL> CREATE TABLE col_enc_test_nosalt
(
ID VARCHAR2(10),
name VARCHAR2(10),
passw VARCHAR2(30) ENCRYPT NO SALT
)
Table created.

SQL> CREATE INDEX KAMIL.indx_passw_1 ON KAMIL.COL_ENC_TEST_NOSALT (PASSW)
Index created.

İndex’i hata almadan oluşturduk.

Wallet kullanılıyor olmasına rağmen kapatılmış iken encrpytionı kullanmaya çalışırsanızda;

SQL> CREATE TABLE col_enc_test_nosalt
(
ID VARCHAR2(10),
name VARCHAR2(10),
passw VARCHAR2(30) ENCRYPT
)
Error at line 1
ORA-28365: wallet is not open
Script Terminated on line 66.

Bu hatayı alırsınız.

Aynı tablo içerisinde birden fazla kolon üzerinde encryption kullanacaksanız, tüm kolonlarda aynı algoritmeyı kullanmak zorundasınız. Aksi takdirde aşağıdaki hatayı alırsınız;

SQL> CREATE TABLE col_enc_test2
(
ID VARCHAR2(10) ENCRYPT USING ‘AES192’,
name VARCHAR2(10),
passw VARCHAR2(30) ENCRYPT USING ‘3DES168’
)
Error at line 1
ORA-28340: a different encryption algorithm has been chosen for the table
Script Terminated on line 81.

Hali hazıda var olan tablolar üzerinde TDE opsiyonunu kullanmak isterseniz ;

SQL> create table kamil.sales as select * from sh.sales
Table created.

Kamil scheması altındaki sales tablosundaki cust_id kolonunu encrpy etmek istediğimizde;

SQL> alter table kamil.sales modify (cust_id encrypt)
Table altered.

Yeni bir encrypt kolon eklemek istersek ;

SQL> alter table kamil.sales add (price number encrypt)
Table altered.

SALT opsiyonu ile encrypt edilmiş bir kolonu NO SALT’ a çevirmek istediğimizde;

SQL> alter table kamil.sales modify (cust_id encrypt no salt )
Table altered.

Tablespace bazında bir encrption yapmak istediğimizde ;

Tablespace bazında TDE kullanımından da biraz bahsedelim. TDE kullanılarak tablespace oluşturmak istediğimizde ;

SQL> CREATE TABLESPACE TBS_ENCRYPT DATAFILE
‘C:\ORACLE\ORADATA\PERFDB\PERFDB\tbs_encrypt01.DBF’ SIZE 500M AUTOEXTEND ON NEXT 128M MAXSIZE 5120M
LOGGING
ENCRYPTION USING ‘AES192’
DEFAULT STORAGE (ENCRYPT)
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON
Tablespace created.

Burada ufak bir not, encrypt tablespace oluştuyorsanız default storage opsiyonunu ENCRYPT olarak mutlaka kullanmanız gerekmektedir.

SQL> CREATE TABLESPACE TBS_ENCRYPT2 DATAFILE
‘C:\ORACLE\ORADATA\PERFDB\PERFDB\tbs_encrypt02.DBF’ SIZE 100M AUTOEXTEND ON NEXT 128M MAXSIZE 5120M
LOGGING
ENCRYPTION USING ‘AES192’
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON
Error at line 1
ORA-28372: missing ENCRYPT storage option for encrypted tablespace
Script Terminated on line 108.

NO SALT opsiyonu encrpyt tablespace create ederken kullanılamaz.

Testimize devam edelim; Encrypt tablespace’ imiz içerisine tablo create edelim ve bu tabloyu select etmeye çalışalım;

SQL> CREATE TABLE KAMIL.COL_ENC_TEST2
(
ID VARCHAR2(10 BYTE),
NAME VARCHAR2(10 BYTE),
PASSW VARCHAR2(30 BYTE)
)
TABLESPACE TBS_ENCRYPT
Table created.

SQL> Insert into KAMIL.COL_ENC_TEST2 (ID, NAME, PASSW) Values (‘1’, ‘kamil’, ‘kamil_pass’)
1 row created.
SQL> Insert into KAMIL.COL_ENC_TEST2 (ID, NAME, PASSW) Values (‘2’, ‘ahmet’, ‘ahmet_pass’)
1 row created.
SQL> Insert into KAMIL.COL_ENC_TEST2 (ID, NAME, PASSW) Values (‘3’, ‘Veli’, ‘veli_pass’)
1 row created.
SQL> Insert into KAMIL.COL_ENC_TEST2 (ID, NAME, PASSW) Values (‘4’, ‘altan’, ‘altan_pass’)
1 row created.
SQL> COMMIT
Commit complete.

Wallet’ I kapatıyorum;

SQL> alter system set encryption wallet close identified by “oracle”
System altered.

Tabloyu select ediyorum;

SQL> select count(*) from KAMIL.COL_ENC_TEST2
*
Error at line 0
ORA-28365: wallet is not open
Script Terminated on line 138.

Wallet CLOSE durumda iken encrypt edilmiş hiçbir datayı select edemezsiniz, wallet’ ın mutlaka açık olması gerekmektedir.

SQL> alter system set encryption wallet open identified by “oracle”
System altered.

SQL> select count(*) from KAMIL.COL_ENC_TEST2

COUNT(*)
———-
4
1 row selected.

Özetle şudur ki ; wallet kapalı olduğunda encrypt etmiş olduğunuz dataları kimse göremez. İkincisi, bir şekilde database’ inizin backup’ı istenmeyen kişiler tarafından dışarıya çıkarıldığında encypt edilmiş olan verilerinizi okuyamayacaktır. Bu tarz bir ihtiyacınız varsa TDE opsiyonunu kullanabilirsiniz. Ancak, TDE kullanımının performansa bir etkisi de bulunmaktadır. Bu konu ile ilgili de yaptığım test sonuçlarını sizinle paylaşıyor olacağım. Dolayısıyla size önerim kullanmayı düşünüyor iseniz mutlaka test etmeniz de ciddi yarar var.

Be Sociable, Share!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


9 − iki =