Social Icons


Aprenda Oracle investindo pouco, por assinatura, no "Portal ABC do Oracle"

29 de nov de 2010

Recuperando dados da sessão de usuário


Pessoal,
 
     No artigo de hoje irei demonstrar o uso da função SYS_CONTEXT, uma função muito simples e útil do Oracle Database, que pode ser utilizada, por exemplo, para recuperar dados de uma sessão de usuário e e permitir auditoria de acesso. Como parte das minhas atividades de administração e segurança de BD, eu já utilizei essa função várias vezes dentro de triggers de logon para permitir verificar quem está se conectando no BD, horário, aplicação etc.

    A função SYS_CONTEXT pode ser utilizada tanto em instruções SQL quanto em blocos PL/SQL. No Oracle 10g/11g ela retorna um valor do tipo VARCHAR2 e aceita 2 parâmetros de entrada, também do tipo VARCHAR2: namespace e parâmetro. Esta função permite retornar dados de diversos tipos de contexto (conjunto de atributos ou variáveis predefinidas que são utilizadas por uma aplicação), dentre eles, o contexto USERENV, que é criado automaticamente pelo Oracle quando um usuário inicializa uma sessão de Banco de Dados, e que contém dados que descrevem a atual sessão do usuário.

     Segue abaixo um exemplo de instrução SQL utilizada para retornar dados do contexto USERENV relacionados à sessão de usuário atual (sessão que irá executar a instrução SQL):

         SELECT SYS_CONTEXT('USERENV', 'SERVER_HOST')   "Nome SERVIDOR",
                        SYS_CONTEXT('
USERENV', 'INSTANCE_NAME') "Instância",
                        SYS_CONTEXT('
USERENV', 'HOST')          "CLIENTE",
                        SYS_CONTEXT('
USERENV', 'IP_ADDRESS')    "IP Cliente",
                        SYS_CONTEXT('
USERENV', 'OS_USER')       "Usuário SO",
                        SYS_CONTEXT('
USERENV', 'SESSION_USER')  "Usuário BD"
          FROM    DUAL;



Obs.: Se a instrução acima fosse executada em uma máquina cliente com o nome ws01 e IP 10.1.1.2, com o usuário de nome administrador logado no SO, conectado no BD bd1 do servidor server01, com o usuário de BD fabio, o resultado seria:
          Nome SERVIDOR  | Instância | CLIENTE | IP Cliente |  Usuário SO    | Usuário BD
          server01                     bd1          ws01          10.1.1.2      administrador   fabio 


   

     Para mais informações, consulte os links das referências.


Referências:
     http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/functions150.htm#g1513460
     http://psoug.org/reference/sys_context.html

6 comentários:

  1. Este comando me auxiliou a pegar os dados do usuários, sendo que o da v$session é muito curto para gravar todos os dados informados pelo sistema.

    Muito Obrigado.

    ResponderExcluir
  2. Ajudou bastante a diminuir alguns trabalhos aqui. Obrigado!

    ResponderExcluir
  3. Alguém sabe o porque no ambiente WEB do Forms 11g, não retorna dados do terminal? tando usando o userenv quanto sys_context. Somente rodando via PL/SQL developer ou via CTRL+R me retorna o valor.

    ResponderExcluir
    Respostas
    1. Nunca mexi com Forms, portanto não sei lhe responder... talvez algum dia se alguém ler essa msg e puder lhe ajudar, a pessoa irá lhe responder, mas sugiro que ao invés de esperar essa resposta, que você faça pesquisas no google.
      []s

      Excluir

 

LINKS ÚTEIS

Suporte remoto alunos

Seguidores

Meu One Drive (antigo Sky Drive)