Função usuario

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
cicero.almeida
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Seg, 05 Abr 2010 3:11 pm
Localização: BAHIA

Bom dia!
Gostaria de tira uma duvida, estou usando uma função chamada ts_read_client_info serve para retorna o usuário que esta logado na aplicação, mas esta função n esta funcionando corretamente trás usuários
Errados e às vezes certo. O que quero saber se existe outra função que eu possa usar para retorna o do usuário logado no banco.

Atenciosamente

Cícero Almeida
diegopedrao
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 164
Registrado em: Sex, 22 Ago 2008 12:28 pm
Localização: SP

Dá uma olhada nessa view:

Selecionar tudo


SELECT * FROM V$SESSION;

Att,

Diego Monteiro
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Se você quer o usuário do banco tambem pode usar User.
cicero.almeida
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Seg, 05 Abr 2010 3:11 pm
Localização: BAHIA

Olha só a tabela v$session pode até ajudar mostra os usuários logado no banco da uma olha na função que já existia que esta sendo usada em todo sistema aqui, mas acho que ela esta se perdendo n consigo corrigi
Da uma olhada nela, por favor.

Selecionar tudo

CREATE OR REPLACE Function TS_SEC.TS_READ_CLIENT_INFO   RETURN  varchar2 IS
  v_usuario        varchar2(20);
  v_ip             varchar2(50);
  v_retorno_client varchar2(100);
  v_posicao        number(3);
  v_tamanho        number(3);
  v_nova_posicao   number(3);
  v_nome_nivel     varchar2(25);
Begin

  DBMS_APPLICATION_INFO.READ_CLIENT_INFO(v_Retorno_Client);

  v_Posicao      := INSTR(v_Retorno_Client, '@');
  v_Tamanho      := LENGTH(v_Retorno_Client);
  v_Usuario      := SUBSTR(v_Retorno_Client,1,(v_Posicao - 1));
  v_Nova_Posicao := INSTR(v_Retorno_Client, '@', v_Posicao + 1);
  v_IP           := SUBSTR(v_Retorno_Client, (v_Posicao + 1), (v_Nova_Posicao - v_Posicao)-1);

  IF v_usuario IS NULL THEN
     v_usuario := USER;
  END IF;

  return v_usuario;

END;
/
diegopedrao
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 164
Registrado em: Sex, 22 Ago 2008 12:28 pm
Localização: SP

Essa função traz nada mais nada menos que o usuário logado na sessão.

Não vi problema nenhum na mesma.

Att,

Diego Monteiro
cicero.almeida
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Seg, 05 Abr 2010 3:11 pm
Localização: BAHIA

você teria uma outra função que pra eu testa aqui estão reclamando muito desta.
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Que tal esta?

Selecionar tudo

CREATE OR REPLACE FUNCTION SRS_OBTER_USUARIO_FNC RETURN VARCHAR2 IS
  v_usuario    VARCHAR2(4000) := '';
BEGIN
  BEGIN
    v_usuario := NVL( owa_util.get_cgi_env('REMOTE_USER'),  USER );
  EXCEPTION
    WHEN OTHERS THEN
      v_usuario := USER;
  END;
  --
  RETURN v_usuario;
END;
cicero.almeida
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Seg, 05 Abr 2010 3:11 pm
Localização: BAHIA

Não deu muito certo não, deu uns erros aqui no sistema preciso de uma função que pegue nome do usuario logado na aplicação .


Grato.
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Se seu usuário de aplicação for o mesmo que executa as consultas no banco por baixo, faz um teste usando User.
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP

Dependendo da sua aplicação, o usuário logado nela será diferente do usuário de BANCO, dono da sessão ativa.

Muitas aplicações utilizam um sistema de autenticação próprio, com tabelas de usuários e senhas (, etc...). Este é o seu caso?

Se não for, e o usuário da APLICAÇÃO for o mesmo USUÁRIO DE BANCO, então o USER como todos já disseram antes vai retornar o que você quer.

Se você estiver logado no banco com algum client, para testar isso, é só fazer:

Selecionar tudo

selet USER from dual;
[/quote]
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Selecionar tudo

select USER, uid from dual;
cicero.almeida
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Seg, 05 Abr 2010 3:11 pm
Localização: BAHIA

Meu caso é o primeiro sistema de autenticação próprio, com tabelas de usuários e senhas essa função esta se perdendo com multiplos acessos.
n teria um que traga o usuario logado na aplicação?
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

E ai Cicero, beleza?

uma opção seria você setar um parametro com o usuário q está logado, essa rotina iria logo após o seu código q faz a validação dele no seu sistema...

Setar :

Selecionar tudo

SQL> begin
  2    dbms_application_info.set_client_info ('Cristiano');
  3  end;
  4  /
Recuperar

Selecionar tudo

SQL> set serveroutput on;
SQL> 
SQL> 
SQL> declare
  2    vuser varchar2(50);
  3  begin
  4    dbms_application_info.read_client_info (vuser);
  5    dbms_output.put_line('Usuário : '||vuser);
  6  end;
  7  /

Usuário : Cristiano

PL/SQL procedure successfully completed
[]s!!
cicero.almeida
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Seg, 05 Abr 2010 3:11 pm
Localização: BAHIA

A aplicação já funciona dessa forma, mas setando o Clint_info logo na validação ele sempre vai pegar o ultimo usuário logado, como tem muitos usuários logados simultaneamente executando diversos procedimentos quando usamos a função em um determinado ponto ela n trás o usuário correto e sim o ultimo logado.
Estou pensando em uma solução.
cicero.almeida
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Seg, 05 Abr 2010 3:11 pm
Localização: BAHIA

Existe uma função no oracle que trate multiusuário ?
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Cicero,

Acho que nesse caso a melhor opção tecnica é você não ter uma tabela de usuários que o seu sistema possui e sim criar o usuário dentro do proprio banco...

[]s!
alecio
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Sáb, 05 Fev 2011 12:20 am
Localização: Pato Branco
Ale

Uma forma de que daria para resolver isso era se cada usuario tiver um codigo quando é criado.
Exemplo..PCOD da pessoa, quando gravava um novo usuario ou os velhos gravar algo unico para cada pessoa...Ai em cada tabela do banco ter um campo pcod(tabela) o qual conteria o codigo do usuario que fez o registro...algo assim..ficaria padrão e ajudaria em muitas coisas.
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Responder
  • Informação
  • Quem está online

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