Páginas

6 de mai. de 2013

Recuperando senhas de usuários no Oracle Database


Olá pessoal,

     No artigo de hoje vou demonstrar como recuperar a senha (criptografada) de um usuário no BD Oracle, para permitir que você possa alterá-la provisoriamente, usar a conta do usuário com a senha alterada e possibilitar que posteriormente você volte a senha original novamente, sem ter conhecimento de qual era esta senha. Este procedimento é muito útil para nos ajudar a resolver alguns problemas (que irei explicar adiante) e pode ser considerado uma técnica de hacking ou cracking (entenda melhor a diferença entre os 2 termos no link http://safe-tech.blogspot.com.br/p/definicao-geral-de-hacking.html), conforme o seu uso. Considerando que hacking é a forma legal de usar o conhecimento, execute o procedimento que vou passar neste artigo somente quando você tiver autorização para fazê-lo. Utilize-o em situações diversas, tais como a que vou relatar abaixo:


         - O empregado Fábio Prado saiu de férias ou está de licença médica e somente ele tem a senha de uma conta de BD (chamada FABIO) que possui os privilégios necessários para executar alguns scripts e gerar os relatórios contábeis mensais. O gerente dele te ligou, informou que não tem a senha do usuário FABIO e disse que precisa urgentemente dos relatórios. Solução sugerida: Altere a senha do usuário FABIO, mas antes recupere a senha criptografada dele. Passe a nova senha para o Gerente e peça a ele para gerar os relatórios e te avisar quando terminar o trabalho, para que você possa voltar a senha anterior (que você nunca saberá qual é, pois estará voltando-a em modo criptografado). Este procedimento também pode ser utilizado para testar acessos de  usuários que já estão em produção e quaisquer outras atividades semelhantes.
  
     A técnica de recuperar a senha no Oracle Database é muito simples, mas requer privilégios administrativos no BD ou privilégio de consulta na visão DBA_USERS (10G) ou USER$ (11G). Segue abaixo um roteiro passo-a-passo de como recuperar a senha criptografada do usuário FABIO citado no exemplo do parágrafo anterior, alterar a sua senha e posteriormente retornar a senha original (a partir do valor de senha criptografado):

PASSO-A-PASSO

Passo 1 - Recuperando a senha de um usuário:
     a) Para recuperar a senha de um usuário do BD com nome FABIO no Oracle 10G, execute a instrução SQL abaixo:
        select  username, password  
        from    dba_users 
        where   username = 'FABIO';
Resultado:
USERNAME                       PASSWORD
------------------------------ ------------------------------
FABIO                          208F05441849D26C


     Para recuperar a senha de um usuário do BD com nome FABIO no Oracle 11G, execute a instrução SQL abaixo:
        select  name, password  
        from    user$
        where   name = 'FABIO';
Resultado:
NAME                           PASSWORD
------------------------------ ------------------------------
FABIO                          208F05441849D26C

Obs.: No 11G muita coisa melhorou em nivel de segurança no BD. A visão DBA_USERS, por exemplo, não contém mais a coluna PASSWORD. Para ver a senha criptografada do usuário, é necessário consultar a  nova visão USER$, conectado com o usuário SYS, pois somente ele enxerga essa visão. Se precisar acessá-la conectado com outro usuário do BD crie uma função no schema do SYS para retornar a senha de um determinado usuário, consultando internamente a visão USER$, como no exemplo abaixo, e dê o privilégio de EXECUTE nesta função para o usuário que você deseja permitir a sua execução.

create or replace 
FUNCTION FC_RETORNA_PASSWORD(P_USERNAME VARCHAR2) RETURN VARCHAR2 AS
                v_password varchar2(4000);
              BEGIN
                  SELECT  PASSWORD into v_password
                  FROM    USER$
                  where   NAME = p_username;
                  
                  return v_password;
              end;
  
     b) Anote o valor do retorno da coluna PASSWORD para possibilitar voltar a senha original no último passo.

Passo 2 - Alterando a senha do usuário:
    Altere a senha do usuário para um valor desejado que possibilitará o uso da conta por um tempo determinado, executando o comando abaixo:               
        ALTER USER FABIO IDENTIFIED BY FABIO;
Resultado:
user FABIO alterado.

Passo 3 - Retornando a senha original do usuário
     Considerando que ao chegar neste passo o gerente já se conectou no BD com a conta de usuário FABIO, gerou os relatórios e pediu para você voltar a senha original, execute o comando abaixo para concluir a atividade:               
        ALTER USER FABIO IDENTIFIED BY VALUES '208F05441849D26C';
Resultado:
user FABIO alterado.


Obs.: O valor '208F05441849D26C' foi recuperado no 1º passo deste roteiro.
  

  
Bom pessoal, por hoje é só!
Qualquer dúvida, deixe um comentário!

[]s
   

12 comentários:

  1. Muito bom Fábio, excelente. Uma dica aparentemente simples, porém muito útil no dia a dia.

    ResponderExcluir
  2. Assunto bem interessante.
    Cadê posts novos?

    Boa tarde e obrigado!

    ResponderExcluir
    Respostas
    1. Obrigado pelo comentário! Qto ao novos posts, esse é o artigo mais novo, foi publicado semana passada. Se vc me contratar para publicar um artigo novo todo dia, eu posso fazer isso... mas tem que pagar bem para eu poder deixar de lado outras atividades minhas, ok? rsrsrssrsrs

      Excluir
    2. Fabio, você tá de parabéns cara você ajuda bastante com os post, a galera que não tem muita grana para comprar um curso seu.
      Parabéns cara continua assim!

      Excluir
  3. Fabio, bom dia!
    O valor '208F05441849D26C' foi recuperado no 1º passo deste roteiro esta criptografado, como o oracle entende a senha original mascarada pela string voltando a original?

    ResponderExcluir
    Respostas
    1. Capixaba, no Passo 3 quando você fornece a string da senha no comando ALTER USER após a palavra BY, o Oracle já entende que o próximo valor é a senha criptografada, portanto, ele a armazena internamente com este valor. Quando tem que validar a senha, ele aplica o algoritmo e chave de decriptografia, transformando-a no valor original e faz a validação, ok?

      Excluir
  4. Rápido e efetivo. Estava precisando copiar um banco, mas o DBA por estar muito ocupado me deixou na mão. Eu mesmo fiz os procedimentos aqui citados e fiz uma cópia simples.

    Obrigado Fábio Prado!

    ResponderExcluir
  5. Salvasse minha vida duas vezes já com esse post Fabio, muito obrigado.

    ResponderExcluir