이 트리거를 걸어둬도 유저가 dba 권한을 가지고 있으면 동작하지 않는다.
허용하는 ip가 아니면 해당 유저가 접속할 수 없도록 하는 예시
create or replace TRIGGER SYSTEM.LOGON_ACL
after logon
on database
WHEN (
user='유저명'
)
declare
v_ip varchar(32);
BEGIN
select sys_context('USERENV', 'IP_ADDRESS') into v_ip from dual;
IF (v_ip not in ('xx.xx.xx.xx','xx.xx.xx.xx')) THEN
RAISE_APPLICATION_ERROR(-20000, 'Access denied! You don"t have permission to login!');
ELSIF (v_ip is null) then --db서버에서 sqlplus 방지
RAISE_APPLICATION_ERROR(-20000, 'Access denied! You don"t have permission to login!');
END IF;
END;
아니면 이렇게도 가능하다
create or replace TRIGGER SYSTEM.LOGON_ACL
after logon
on 유저명.schema
declare
v_ip varchar(32);
BEGIN
select sys_context('USERENV', 'IP_ADDRESS') into v_ip from dual;
IF (v_ip not in ('xx.xx.xx.xx','xx.xx.xx.xx')) THEN
RAISE_APPLICATION_ERROR(-20000, 'Access denied! You don"t have permission to login!');
ELSIF (v_ip is null) then --db서버에서 sqlplus 방지
RAISE_APPLICATION_ERROR(-20000, 'Access denied! You don"t have permission to login!');
END IF;
END;