1- TCP.VALIDNODE_CHECKING kullanıp sadece izin verdiğimiz ip adreslerinin database ulaşmasını sağlayalım
INVITED_NODES bağlanmasına izin verilenler
EXCLUDED_NODES bağlanmasına karşı çıkılanlar

edit sqlnet.ora

tcp.validnode_checking = yes
tcp.invited_nodes = (192.168.2.2, 192.168.2.3)
# tcp.excluded_nodes = (192.168.2.4)

2- Database logon trigerı yazalım.

CREATE OR REPLACE TRIGGER check_session_connection
AFTER LOGON ON DATABASE
DECLARE
cursor c_session is
select sys_context(‘userenv’,’session_user’) username,
s.module, s.program
from v$session s
where sys_context(‘userenv’,’sessionid’)=s.audsid;
r_session c_session%rowtype;
BEGIN
OPEN c_session;
FETCH c_session into r_session;
IF upper(r_session.module) like (‘%EXCEL%’) THEN
raise_application_error (20901,’Excel – go away.’);
END IF;
IF upper(r_session.module) like (‘%ACCESS%’) THEN
raise_application_error (20902,’Access – go away.’);
END IF;
CLOSE c_session;
END;

3- password verify function ile profile değiştirip passwordleri komplex hale getirelim.
SQL> @?/rdbms/admin/utlpwdmg.sql
SQL> alter profile default limit password_verify_function verify_function;

4- Database linklerin 10g R2 ile güvenliğini artıralım. Sys.link$ sorgulandığında database linkini fix user ile create ederseniz passwordu görebilirsiniz.

5- Audit user logon bilgileri

set newpage 2
set heading off

select count(*) Num,
substr(username,1,10) username,
substr(terminal,1,12) terminal,
substr(os_username,1,15) os_username,
substr(to_char(timestamp,’DD-MON-YY’), 1,9) timestamp
from dba_audit_session
where returncode0
and timestamp > sysdate-7
group by username,
terminal,
os_username,
to_char(timestamp,’DD-MON-YY’);