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.
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.
user FABIO alterado.
Qualquer dúvida, deixe um comentário!
[]s
Muito bom Fábio, excelente. Uma dica aparentemente simples, porém muito útil no dia a dia.
ResponderExcluirMais uma vez, uma ótima matéria.
ResponderExcluirObrigado Alessandra e Luis Felipe pelo feedback!
ExcluirAssunto bem interessante.
ResponderExcluirCadê posts novos?
Boa tarde e obrigado!
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
ExcluirFabio, 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.
ExcluirParabéns cara continua assim!
Obrigado Gustavo!
ExcluirFabio, bom dia!
ResponderExcluirO valor '208F05441849D26C' foi recuperado no 1º passo deste roteiro esta criptografado, como o oracle entende a senha original mascarada pela string voltando a original?
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?
ExcluirRá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.
ResponderExcluirObrigado Fábio Prado!
Salvasse minha vida duas vezes já com esse post Fabio, muito obrigado.
ResponderExcluirObrigado pelo feedback Renato!
Excluir[]s