PLSQL ile WRAP işlemleri
Plsql kodlarımızı wrap utility ile şifreleyebilir, okunurlugunu engelleyebiliriz. Bunun için oracle’ın wrap adında bir özelliği var.Wrap oracle kurulumla default olarak geliyor. Wrap utility oracle_home altında BIN klasörü içinde bulunuyor.Plsql procedure,fonksiyon,trigger,paketler de dahil olmak üzere plsql kodları wrap edebiliriz.
-Wrap utility
Genel Kullanımı: (ms dos ya da linux terminal ekranında)
WRAP INAME=NORMAL_CODE.sql ONAME=WRAPPED_CODE.sql
INAME = Input dosya ismi(Normal kodların yazılı olduğu dosya)
ONAME = Output dosya ismi(Kripto edilmiş kodların yazılı oldugu dosya)
Eğer output dosya belirtmezseniz INAME’le aynı isim ve plb uzantıyla aynı dizine output dosyası oluşturur.
WRAP INAME=NORMAL_CODE.sql
Processing C:/NORMAL_CODE.SQL to C:/NORMAL_CODE.plb
Örnek için basit bir fonksiyonumuz olsun..
SQL>CREATE OR REPLACE FUNCTION is_number( p_str IN VARCHAR2 )
RETURN NUMBER IS
l_num NUMBER;
BEGIN
l_num := to_number( p_str );
RETURN 1;
EXCEPTION
WHEN others THEN
RETURN 0;
END is_number;
Fonksiyonumuzu NORMAL_CODE.sql isimli dosyaya yazıp wrap ile encrypt edelim..
WRAP INAME=NORMAL_CODE.sql ONAME=NORMAL_CODE.plb
Processing C:/NORMAL_CODE.SQL to C:/NORMAL_CODE.plb
Plb dosyamızı bir metin editörüyle açarak direk database’de çalıştırabiliriz..
SQL>CREATE OR REPLACE FUNCTION is_number wrapped
a000000
b1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
b6 d2
882D9WqMpClp5XuAO9MWz7/YgLowg+nwLcsVfHSiWE6UeCWyBPQEg3BaFLjFSTdI98gEe4n7
27W3GAmnt+TPI79aflFOX/mNLLvun6rRs4svREpSJpW0o99NjsqOt3xXkP3TQ+Y1sHHi9BE9
ULMIWcTaok+dnU/CJapyo9X8dA2GMGvqDHQsYqFn+vPXPVwmmxzRWXvtzqbqzdHb
/
Fonksiyonumuzu edit edip bakarsak wrapped oldugunu görürüz.
Is_Number Fonksiyonumuzu çalıştıralım.Sorunsuz çalışıyor.
SELECT is_number('A') sayimi FROM DUAL;
sayimi
------
0
-dbms_ddl.wrap fonksiyonu ile wrap etmek:
Kodlarımızı wrap etmek için 2. bir yöntemde dbms_ddl paketindeki wrap fonksiyonunu kullanabiliriz.Hatta bu fonksiyonu kullanarak verdiğimiz kodu wrap edip geri döndüren bir fonksiyon yazalım.Dbms_outputla ekrana bastırabiliriz, zaten fonksiyonumuz da kodun wrap edilmiş halini geri döndürecek.
SQL>CREATE OR REPLACE FUNCTION plsql_code_wrap(vNormalCode IN VARCHAR2)
RETURN VARCHAR2 IS
vWrappedCode varchar2(4000);
begin
vWrappedCode := dbms_ddl.wrap(vNormalCode);
dbms_output.put_line('<<--- Normal Code --->>');
dbms_output.put_line(vNormalCode);
dbms_output.put_line('<<--- Wrapped Code --->>');
dbms_output.put_line(vWrappedCode);
RETURN vWrappedCode;
END plsql_code_wrap;
Fonksiyonumuzu test edelim.
SELECT PLSQL_CODE_WRAP('CREATE OR REPLACE FUNCTION is_number(p_str IN VARCHAR2)RETURN NUMBER IS l_num NUMBER;BEGIN l_num:=to_number(p_str);RETURN 1;EXCEPTION WHEN others THEN RETURN 0;END is_number;') FROM DUAL;
Fonksiyonun sonucu bizim wrap edilmiş kodumuz(wrapped is_number fonksiyonu):
CREATE OR REPLACE FUNCTION is_number wrapped
a000000
369
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
9d c2
5tPRLv8balhiFN3XHI6Kqo2glGEwg8eZgcfLCNL+XoVWSnLV1y7yYiXn4yjLvQml0l7nx3TA
M7h0ZSV0wLK9sptepZmBMsBElzbVztsdMWm8DbcK2ml/VIWX39skHGZ0f2Drq+WxUIMqFTEq
pn5cUwcKT6yq4wf2aUvm5+OyXAtwzfzB4SEcJ6wqHaYW91ap
Fonksiyondan dönen wrap edilmiş is_number fonksiyonu kodunu doğrudan database’de çalıştırabiliriz..