Olá Amigos. O privilégio de sistema ADMINISTER DATABASE TRIGGER bypassa o Raise_application_error da trigger de logon. Este faz parte, por exemplo, da role IMP_FULL_DATABASE que o Chiappa comentou.
Revise as roles e os privilégios de sistema do usuário em busca desse privilégio. Views: dba_sys_privs e dba_role_privs []'s 2011/4/5 José Laurindo <[email protected]> > > > Nah, não me lembro de nenhuma diferença no RAISE_APPLICATION_ERROR > específica pra RAC e/ou pra 11g, acho muito mais provável que vc esteja > caindo num dos casos de exceção pra trigger de logon : cheque em > http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:561622956788e > em > http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3236035522926#4412852231068, > veja que além do já manjado caso do SYSDBA em algumas versões até outros > privilégios que neguinho pensa que não é tão poderoso (como a role > IMP_FULL_DATABASE , por exemplo) podem fazer o cara bypassar , vc tem > Absoluta certeza que esse usuário não tem nada ? > > Outro teste pode ser : Cria um usuário LIMPO, com : > > CREATE USER zezinho identified by senhadele; > > e NÂO atribua role nenhuma, dê apenas : > > GRANT CREATE SESSION TO zezinho; > > e tenta conectar com ele, veja lá se aí a trigger elimina a sessão após o > RAISE... E bota uns dbms_output, ou mesmo uns ULT_FILE.PUT_LINE, pra vc ter > Certeza que Realmente tá chegando na linha do RAISE... > > > []s > > Chiappa > > --- Em [email protected], "candiurudba" <candiurudba@...> > escreveu > > > > Li o post e fiz a alteração na Trigger mas mesmo assim sem sucesso... > > > > Ela envia o email informando que o usuário esta conectado no ambiente mas > ao inves de bloquear com o raise_application, passa direto e finaliza o > ciclo > > > > FROM SYS.gv_$session > > where audsid = sys_context ('USERENV', 'SESSIONID') > > and ownerid=2147483644 > > AND audsid != 0 -- Não checa conexões do SYS > > AND ROWNUM = 1; > > > > Realmente acredito que o problema esta no raise_application mas o pq não > tenho a minima ideia... > > > > Fiz alguns outros testes com after update e etc com outros usuário e o > bendito funciona..mas utilizando o sys com after logon database, não vai...e > olha que funcionava...parou foi a partir desta semana... > > > > Alguma sugestão ? Estou intrigado.... > > > > --- Em [email protected], "candiurudba" <candiurudba@> > escreveu > > > > > > GRande Jchiappa, blezinha ? > > > > > > Então...pq eu consigo mapear todos os usuários sem problemas, envio até > os emails relatando o acesso, ou seja, aparentemente esta funcionando o > antigooo truca para pegar a propria sessão. > > > > > > Fiz testes removendo o raise_application e com ele...ambos dão o mesmo > resultado, envia o email mas não bloqueia... > > > > > > Vc ja viu algum caso de problemas especificos no raise application para > RAC ? > > > > > > não me vem nada na cabeça agora mas, você teria alguma outra sigestão > para trigger de bloqueios ? Não conheço nenhuma outra maneira de efetivar o > bloqueio por usuários e programas.... > > > > > > --- Em [email protected], José Laurindo <jlchiappa@> > escreveu > > > > > > > > Eu estou sem meu RAC de teste depois da falha clamorosa do meu disco > externo USB, mas em > http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:114412348062na > entrada "Additional Note Re RAC" de January 14, 2010 - 9am o cara diz que > o jeito velho de pegar a própria sessão (ie, audsid = userenv('sessionid') , > que JUSTAMENTE é o que vc usa) não funciona com RAC, pode ser isso, veja > lá... > > > > > > > > []s > > > > > > > > Chiappa > > > > > > > > > > > > --- Em [email protected], "candiurudba" <candiurudba@> > escreveu > > > > > > > > > > Bom dia colegas, > > > > > > > > > > Estou com um probleminha em uma trigger de bloqueio que tenho, que > ora funcionava e agora, aparemente sem motivos, deixou de funcionar... > > > > > > > > > > Ela é bem simples, faço um mapeamento das conexões existem, > procurando por algumas espeficias com usuários e ferramentas de > desenvolvimento. Caso encontre, bloqueio a tentativa de conexão e envio > email para determinadas pessoas. > > > > > > > > > > A questão é que ele esta conseguindo mapear as conexões, envia o > email mas o Raise_Application para efetivar o bloquei não esta funcionando e > pelo que percebi, não funcionada somente no RAC 11.1.0.6 pois nas singles > instance, funciona sem problemas. > > > > > > > > > > Alguem teria alguma ideia ? > > > > > > > > > > Segue a Trigger abaixo: > > > > > > > > > > > > > > > CREATE OR REPLACE TRIGGER "USER_LOGIN_TRIG_PROD > > > > > AFTER LOGON ON DATABASE > > > > > DECLARE > > > > > v_username SYS.gv_$session.username%TYPE; > > > > > v_machine SYS.gv_$session.machine%TYPE; > > > > > v_command SYS.gv_$session.command%TYPE; > > > > > v_program SYS.gv_$session.program%TYPE; > > > > > v_osuser SYS.gv_$session.osuser%TYPE; > > > > > v_module SYS.gv_$session.module%TYPE; > > > > > v_hora NUMBER; > > > > > v_sid SYS.gv_$session.SID%TYPE; > > > > > v_serial# SYS.gv_$session.serial#%TYPE; > > > > > --v_string varchar2(1000); > > > > > > > > > > v_conn utl_smtp.connection; > > > > > v_crlf varchar2 (2) := chr (13) || chr (10); > > > > > v_mesg varchar2 (1000); > > > > > v_instance SYS.v_$instance.INSTANCE_NAME%TYPE; > > > > > > > > > > BEGIN > > > > > SELECT instance_name into v_instance from SYS.v_$instance; > > > > > > > > > > SELECT username, > > > > > machine, > > > > > NVL (command, '0'), > > > > > NVL (program, 'OAS10G'), > > > > > TO_NUMBER (TO_CHAR (SYSDATE, 'HH24')), > > > > > NVL (osuser, 'OAS10G'), > > > > > MODULE, > > > > > SID, > > > > > serial# > > > > > INTO v_username, > > > > > v_machine, > > > > > v_command, > > > > > v_program, > > > > > v_hora, > > > > > v_osuser, > > > > > v_module, > > > > > v_sid, > > > > > v_serial# > > > > > FROM SYS.gv_$session > > > > > WHERE audsid = USERENV ('SESSIONID') > > > > > AND audsid != 0 -- Não checa conexões do SYS > > > > > AND ROWNUM = 1; > > > > > > > > > > IF (v_username = 'PRODUCAO') AND ((UPPER(v_module) = '%SQL*Plus%') > OR > > > > > (UPPER(v_module) LIKE '%TOAD%') OR -- TOAD > > > > > (UPPER(v_module) = 'PL/SQL Developer') OR -- PL / SQL DEVELOPER > > > > > (UPPER(v_module) LIKE '%SQLNAV%') OR -- SQL NAVIGATOR > > > > > (UPPER(v_module) LIKE '%SQLPLUS%')OR > > > > > (UPPER(v_module) LIKE '%SQL*PLUS%')OR > > > > > (UPPER(v_module) LIKE '%PLSQLDEV.EXE%')OR --SQL PLUS > > > > > (UPPER(v_module) LIKE '%DEVELOPER%')OR > > > > > v_program LIKE ('%plus90.exe%')OR > > > > > (UPPER(v_program) LIKE 'plus90.exe')OR > > > > > (UPPER(v_program) LIKE '%SEMACESSO%')OR > > > > > (UPPER(v_module) LIKE 'sqlplusw.exe') OR > > > > > (UPPER(v_module) LIKE '%SQL*Plus%')) THEN -- Bloqueia conexão e > envia email > > > > > > > > > > raise_application_error (-20000, 'ATENÇÃO !! Não é permitido o > acesso a produção usando > > > > > este aplicativo !!. Por favor, entre em contato com dba@' ); > > > > > > > > > > v_conn := utl_smtp.open_connection ('10.12.0.3', 25); > > > > > utl_smtp.helo (v_conn, '10.12.0.3'); > > > > > utl_smtp.mail (v_conn, 'XXX@'); > > > > > v_mesg := > > > > > 'Date: ' > > > > > || to_char (sysdate, 'dd Mon yy hh24:mi:ss') > > > > > || v_crlf > > > > > || 'From: XXX <XXX@> ' > > > > > || v_crlf > > > > > || 'Subject: Tentativa de acesso a base de dados' > > > > > || v_crlf > > > > > || '' > > > > > || v_crlf > > > > > || > > > > > > '***************************************************************************' > > > > > || '' > > > > > || v_crlf > > > > > || ' O usuário "' || v_osuser|| '/'|| v_username|| '" tentou > > > > > acesso INDEVIDO a base de dados da máquina "'|| v_machine || '"' > > > > > || v_crlf > > > > > || ' com o programa "'|| v_program || '"' > > > > > || v_crlf > > > > > || ' na instancia "'|| v_instance || '"' > > > > > || v_crlf > > > > > || ' A tentativa de acesso foi realizada com o usuário PRODUCAO!!! > ' > > > > > || v_crlf > > > > > || ' Como ele nao tem permissao, seu acesso foi negado!!! ' > > > > > || v_crlf > > > > > || '' > > > > > || v_crlf > > > > > || 'Atenciosamente,' > > > > > || v_crlf > > > > > || 'XXX' > > > > > || v_crlf > > > > > || > > > > > > '***************************************************************************'; > > > > > utl_smtp.data (v_conn, v_mesg); > > > > > utl_smtp.quit (v_conn); > > > > > END IF; > > > > > EXCEPTION > > > > > WHEN NO_DATA_FOUND THEN > > > > > NULL; > > > > > END; > > > > > > > > > > > > > > > > > -- Israel Lopes dos Santos DBA Oracle "Todas as coisas cooperam para o bem daqueles que amam a Deus." Rm 8.28 [As partes desta mensagem que não continham texto foram removidas]
