Conexão do sistema

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Avatar do usuário
jessica.ff
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Seg, 11 Jun 2007 2:28 pm
Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.

DBAs preciso de socorro, por isso vou tentar explicar meu problema da melhor forma possivel:

Tenho um sistema web (PL/WEB e Workflow), onde cada usuario do sistema recebe um usuario no banco, ao se conectar no aplicativo a conexão é feita no banco, e se a pessoa erra mais de 3 vezes, aparece a tela de erro:

Selecionar tudo

Database Log In Failed 
An invalid username/password caused log in to database fail. 

Verify that the username/password you provided  is correct. 


ORA-28000: the account is locked Error-Code:28000 Error TimeStamp:Fri, 18 Sep 2009 13:43:50 GMT 
Porem eu preciso alterar para em vez de aparecer essa tela, carregue uma tela desenvolvida pela equipe para que o usuario possa reiniciar a senha.

Só que eu não consigo achar onde chama essa tela, pelo que eu entendi isso é tudo dentro do oracle.

Agora a duvida:

Tem como fazer isso? Como fazer isso?

Valeu galera
pauloaleo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 181
Registrado em: Qua, 09 Fev 2005 12:30 pm
Localização: SÃO BERNARDO DO CAMPO - SP

Não entendi direito . As contas de usuario depois de 3 erros de senha locam. O Lock de usuario , esta definido na dba_users. Com o comando alter user zzzzz account unlock; onde zzzzzz é o nome do usuario. Este bloqueio deve estar definido por rule.

Vo pode mudar a rule que faz isso com o comando:

Selecionar tudo

ALTER PROFILE yyyyyy LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;
onde yyyyyy é o nome da rule.

Para você ver qual a rule você digita:

Selecionar tudo

select PROFILE from dba_users where username = 'zzzzzzz';
Isso explica o que você esta querendo? Quanto a tela , isso eu não entendi.

[]s
Avatar do usuário
jessica.ff
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Seg, 11 Jun 2007 2:28 pm
Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.

Oi Paulo, eu não preciso modificar a quantidade de tentativas. Isso tem que manter.

O que eu tenho é desenvolver uma tela onde o usuario possa desbloquear a senha e gere uma nova. isso já ta feito a tela

o que eu não consigo é que em vez de aparecer aquela ela de erro do oracle, chame a minha tela que eu criei.
pauloaleo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 181
Registrado em: Qua, 09 Fev 2005 12:30 pm
Localização: SÃO BERNARDO DO CAMPO - SP

Entendi. Faça uma trigger de logon , que quando de erro de lock account , chame a sua tela.

Se entendi direito uma trigger de logon resolve isso
pauloaleo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 181
Registrado em: Qua, 09 Fev 2005 12:30 pm
Localização: SÃO BERNARDO DO CAMPO - SP

Segue um exemplo que grava auditoria no caso de logon failure por erro 1017 - Invalid username ou password.

[]s

Selecionar tudo

CREATE OR REPLACE TRIGGER "SYS"."LOGON_FAILURES" AFTER
ERROR ON DATABASE DECLARE
  osuserid VARCHAR2(30);
  hmachine VARCHAR2(54);
  v_module VARCHAR2(48);
BEGIN

IF (IS_SERVERERROR(1017)) THEN
      hmachine := UPPER(sys_context('USERENV','host')) || '(' || UPPER(sys_context('USERENV','ip_address')) || ')';
      osuserid := UPPER(sys_context('USERENV','os_user'));
      SELECT LOWER(module) INTO v_module
            FROM v$session WHERE SID = (SELECT SID FROM v$mystat WHERE ROWNUM=1);
      INSERT INTO audit_logon ( attempt_dt, os_user, program, machine, logon_failure )
      VALUES (SYSDATE, osuserid, v_module, hmachine, 'Y');
END IF;

/*
CREATE TABLE sys.AUDIT_LOGON
(
  ATTEMPT_DT  DATE,
  OS_USER     VARCHAR2(50 BYTE),
  PROGRAM     VARCHAR2(100 BYTE),
  MACHINE     VARCHAR2(100 BYTE),
  LOGON_FAILURE CHAR(1 BYTE) DEFAULT 'N'
)
*/

END;
Avatar do usuário
jessica.ff
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Seg, 11 Jun 2007 2:28 pm
Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.

Já to indo testar :D

Se funcionar eu aviso

VALEUUUUU :-o
Avatar do usuário
jessica.ff
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Seg, 11 Jun 2007 2:28 pm
Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.

Funcionou!!! :D

A unica coisa que tive que corrigir é que ERROR não funcionou, mudei para SERVERERROR

Agora preciso de ajuda de novo, dentro dessa trigger eu preciso me conectar com um usuario generico, para que possa chamar minha tela(package), mas não to conseguindo conectar. Tentei utilizar

Selecionar tudo

vconn := 'conn USER/password@banco.world';
execute immediate vconn;
É lógico que não funcionou!!! hehehehe

alguém me socorre????
pauloaleo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 181
Registrado em: Qua, 09 Fev 2005 12:30 pm
Localização: SÃO BERNARDO DO CAMPO - SP

Em vez de fazer isso , não é mais facil criar uma rule com grant de execute da sua package e cadastrar os usuarios nesta rule?
Avatar do usuário
jessica.ff
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Seg, 11 Jun 2007 2:28 pm
Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.

Oi Paulo, não consegui entender muito bem, poderia me explicar melhor

=D
pauloaleo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 181
Registrado em: Qua, 09 Fev 2005 12:30 pm
Localização: SÃO BERNARDO DO CAMPO - SP

Melhor ainda , por que você não da grant de execute para todos os usuarios do seu banco executarem esta procedure que chama a tela?
Avatar do usuário
jessica.ff
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Seg, 11 Jun 2007 2:28 pm
Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.

O problema é: como eu vou chamar(carregar) a package se não estou conectada ao banco?
pauloaleo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 181
Registrado em: Qua, 09 Fev 2005 12:30 pm
Localização: SÃO BERNARDO DO CAMPO - SP

connect não é um comando pl sql , é do sqlplus. Vou pesquisar , mas acho que o ideal é você chamar da trigger de logon um programa que se conecta no banco , altera a senha ou reseta e sai fora novamente , chamando a aplicação principal.
Avatar do usuário
jessica.ff
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Seg, 11 Jun 2007 2:28 pm
Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.

Oi pessoal,

Da forma que eu queria fazer pelo jeito não vai dar mesmo né...
então o que eu pensei na trigger de logon eu chamar um script ou bat que faça a conexão e chame a tela que eu preciso (uma package) e carregue ela no IE.

Bom eu tive essa idéia porem eu não sei:
- Chamar um script no pl;
- E chamar a tela no script;

alguém ME AJUDA???
pauloaleo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 181
Registrado em: Qua, 09 Fev 2005 12:30 pm
Localização: SÃO BERNARDO DO CAMPO - SP

Jessica , ai já não é tanto minha praia. Tenta o Dr_gori , que ele manja mais de PL.

[]s
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Pois é...

Eu já vi algo parecido da seguinte forma:
Existe um usuário sem NENHUM privilégio, com exceção de EXECUTE numa rotina de troca de senha.

Então a senha padrão desse usuário não era mistério, poderia estar aparecendo no LINK, etc... Pois a única coisa que ela fazia era mudar a senha, (é claro, testando se o usuário mudando a senha era ele mesmo, etc, digitar senha antiga)

Essa era uma forma que a gente usava no forms. (não era em PLWEB)

No seu caso, acho que a única forma de executar coisas de OUTRO usuário é atraves de DB_LINK - ou chamando um SHELL/BATCH script. O problema é: quando dispara o erro a conexão já está morta ? Ainda tem como rodar algo via db-link ? Eu faria um teste ai pra ver se ainda tem como rodar algo.

:-(
Só testando mesmo
Avatar do usuário
jessica.ff
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Seg, 11 Jun 2007 2:28 pm
Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.

E como eu faria chamando um SHELL/BATCH script????
:roll:
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Bom, quando eu trabalhei aí, a gente usava a package DAEMON.
Veja esse link: http://glufke.net/oracle/viewtopic.php?t=2226

Deve ter na sua base. Se não tiver, talvez você tenha que pedir pra um DBA instalar a daemon.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes