Ini adalah contoh Trigger untuk mencegah pengguna menggunakan alat tambahan (menggunakan Tools seperti Toad,SQL Depveloper ) untuk terkoneksi ke database production :
sqlplus / as sysdba
CREATE OR REPLACE TRIGGER block_tools_trigger AFTER LOGON ON PR_SOAINFRA.SCHEMA DECLARE v_prog sys.v_$session.program%TYPE; BEGIN SELECT program INTO v_prog FROM sys.v_$session WHERE audsid = USERENV(‘SESSIONID’) AND audsid != 0 — Don’t Check SYS Connections AND ROWNUM = 1; — Parallel processes will have the same AUDSID’s IF UPPER(v_prog) LIKE ‘%TOAD%’ OR UPPER(v_prog) LIKE ‘%T.O.A.D%’ OR — Toad UPPER(v_prog) LIKE ‘%SQLNAV%’ OR — SQL Navigator UPPER(v_prog) LIKE ‘%PLSQLDEV%’ OR — PLSQL Developer UPPER(v_prog) LIKE ‘%BUSOBJ%’ OR — Business Objects UPPER(v_prog) LIKE ‘%EXCEL%’ OR — MS-Excel plug-in UPPER(v_prog) LIKE ‘%SQLPLUS%’ — SQLPLUS THEN RAISE_APPLICATION_ERROR(-20000, 'User Production tidak boleh menggunakan Tools .'); END IF; END; /
Contoh user login menggunakan Tools Toad maka trigger otomatis jalan dan memberikan notifikasi atau memberikan pesan message “User Production tidak boleh menggunakan Tools .”
Catatan : Trigger ini tidak berjalan jika exe aplikasi di rename dengan nama lain.
Saran : Karena tidak mungkin untuk memblokir setiap executable dieksekusi atau
berganti nama yang menghubungkan ke database, Anda mungkin dapat mengizinkan beberapa program aplikasi untuk menghubungkan, misalnya dengan menambahkan script berikut :
IF program = xxxx OR (apa pun kondisi di sini misalnya SYS, SYSTEM, PERFSTAT or other admin users) THEN
… di ijinkan konek
ELSE
… tidak di ijinkan
END IF;
Contoh lain penggunaan security pada database oracle versi lebih lengkap
CREATE OR REPLACE TRIGGER SYS.BLOCK_TOOLS_FROM_PROD AFTER LOGON ON DATABASE DECLARE V_SID SYS.V_$SESSION.SID%TYPE; V_SERIAL# SYS.V_$SESSION.SERIAL#%TYPE; V_USERNAME SYS.V_$SESSION.USERNAME%TYPE; V_MACHINE SYS.V_$SESSION.MACHINE%TYPE; V_MODULE SYS.V_$SESSION.MODULE%TYPE; V_PROGRAM SYS.V_$SESSION.PROGRAM%TYPE; V_LOGON_TIME SYS.V_$SESSION.LOGON_TIME%TYPE; V_COUNT INTEGER; BEGIN SELECT COUNT (SID) INTO V_COUNT FROM (SELECT SID, SERIAL#, USERNAME, MACHINE, MODULE, PROGRAM, LOGON_TIME FROM V$SESSION WHERE USERNAME IN (SELECT USERNAME FROM DBA_USERS WHERE PROFILE = 'APLIKASI_PROFILE') AND ( ( ( UPPER (PROGRAM) LIKE '%W3WP%' OR UPPER (PROGRAM) LIKE '%ORA%' OR UPPER (PROGRAM) LIKE '%JDBC%' OR UPPER (PROGRAM) LIKE '%HTTPD%' OR UPPER (PROGRAM) LIKE '%PHP%' OR UPPER (PROGRAM) LIKE '%APACHE%') AND UPPER (MODULE) LIKE '%TOAD%') OR ( ( UPPER (PROGRAM) LIKE '%W3WP%' OR UPPER (PROGRAM) LIKE '%ORA%' OR UPPER (PROGRAM) LIKE '%JDBC%' OR UPPER (PROGRAM) LIKE '%HTTPD%' OR UPPER (PROGRAM) LIKE '%PHP%' OR UPPER (PROGRAM) LIKE '%APACHE%') AND UPPER (MODULE) LIKE '%SQL%') OR ( UPPER (PROGRAM) NOT LIKE '%W3WP%' AND UPPER (PROGRAM) NOT LIKE '%ORA%' AND UPPER (PROGRAM) NOT LIKE '%JDBC%' AND UPPER (PROGRAM) NOT LIKE '%HTTPD%' AND UPPER (PROGRAM) NOT LIKE '%PHP%' AND UPPER (PROGRAM) NOT LIKE '%APACHE%' OR MACHINE IN (SELECT DISTINCT MACHINE FROM SYS.LOG_USER_APLIKASI)))); IF V_COUNT > 0 THEN BEGIN RAISE_APPLICATION_ERROR ( -20000, 'User Terminal Aplikasi Dilarang Login Menggunakan Development Tools !!!'); INSERT INTO SYS.LOG_LOGIN_USER_APLIKASI (SID, SERIAL#, USERNAME, MACHINE, MODULE, PROGRAM, LOGON_TIME) VALUES (V_SID, V_SERIAL#, V_USERNAME, V_MACHINE, V_MODULE, V_PROGRAM, V_LOGON_TIME); COMMIT; END; END IF; END;
Sekian tutorial kali ini, semoga bermanfaat 🙂