Fala Cleber..!
Tente criar a trigger mas sem usar a v$session.. use SYS_CONTEXT
Rode os selects abaixo e verifique se eles lhe ajudam..!
SELECT
SYS_CONTEXT(‘USERENV’,’TERMINAL’),
SYS_CONTEXT(‘USERENV’,’CURRENT_USER’),
SYS_CONTEXT(‘USERENV’,’IP_ADDRESS’),
SYS_CONTEXT(‘USERENV’,’SESSION_USER’)
FROM DUAL;
Basta vc adaptar sua trigger usando estes parametros.. eles são funções nativas do oracle..
Ai vc pode verificar se o IP do cara é interno ou externo.. e fazer um if.. mais ou menos assim…
if (SYS_CONTEXT('USERENV','IP_ADDRESS') not like 'xxx.xxx.%') and SYS_CONTEXT('USERENV','CURRENT_USER') = 'BRASIL' then
raise_application_error(-20001,'VC NAO TEM PERMISSÃO');
end if;
Ou vc pode adaptar conforme vc quiser..!!
Procure na net sobre SYS_CONTEXT q vc encontrara outros parametros para retornar diversas informações..
OBS.: o SYS_CONTEXT só retorna as informações do usuário que o esta executando..
Abraços..!