Block User Production Via Tools Toad, SQL Developer, SQLPlus dll

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 🙂

Pos terkait

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.