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]

Responder a