Pular para o conteúdo principal

Como NÃO criar ou alterar a senha de usuários no banco de dados Oracle

Neste post vou passar uma simples falha de segurança que ocorre quando estamos conectando em banco de dados remoto e não temos a conexão criptografada.


Irei utilizar o comando do linux tcpdump para escutar toda conexão de rede na minha máquina de banco de dados na porta 1521.

tcpdump -As 1518 -i any port 1521

Fiz os teste em duas versões do banco de dados Oracle 11g e 18c. Podemos ver que a falha de segurança ocorre nas duas versões.

Versão 11g
 
[oracle@myhost]$ sqlplus system@bd_teste

SQL*Plus: Release 11.2.0.4.0 Production on Mon Nov 23 15:03:01 2020

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> create user user_teste identified by "minhasenha";
User created.


Analisando a saída do tcpdump podemos ver em texto claro a nossa senha.

 
15:13:20.644358 IP localhost.21678 > localhost.ncube-lm: Flags [P.], seq 620:950, ack 363, win 1685, options [nop,nop,TS val 902579458 ecr 902547193], length 330
E..~.%@.@.bR........T....'#8.........r.....
5.E.5....J.........i......................^.!...............1................................................................................................................N-.............................................................1create user user_teste identified by "minhasenha"....................................................................
15:13:20.644383 IP localhost.ncube-lm > localhost.21678: Flags [.], ack 950, win 537, options [nop,nop,TS val 902579458 ecr 902579458], length 0
E..4}.@.@.............T......'$......(.....
5.E.5.E.................
15:13:20.652971 IP localhost.ncube-lm > localhost.21678: Flags [P.], seq 363:544, ack 950, win 537, options [nop,nop,TS val 902579466 ecr 902579458], length 181
E...}.@.@..V..........T......'$............
5.E
5.E..............b.....................................................3.................................6................#..............................................................................
15:13:20.653063 IP localhost.21678 > localhost.ncube-lm: Flags [.], ack 544, win 1713, options [nop,nop,TS val 902579466 ecr 902579466], length 0
E..4.&@.@.c.........T....'$..........(.....
5.E



Versão 18g

Na versão 18, vou alterar a senha do usuário para ver se conseguimos ver a senha com o tcpdump.

[oracle@myhost]/home/oracle$ sqlplus system@bd_teste

SQL*Plus: Release 18.0.0.0.0 - Production on Seg Nov 23 15:23:57 2020
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Conectado a:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> alter user user_teste identified by "mudeiasenha";
Usuário alterado.


Agora vamos ao tcpdump prcurar a senha:

15:25:26.121773 IP localhost.10915 > localhost.ncube-lm: Flags [P.], seq 1427125228:1427125639, ack 2604883754, win 1594, options [nop,nop,TS val 1569612851 ecr 1569593608], length 411
E....M@.@.2.........*...U.3..C_*...:.......
].d3]..............i......................^.!...............2.................................................................................................................#.............................................................................................................................................2 alter user user_teste identified by "mudeiasenha"....................................................................
15:25:26.121791 IP localhost.ncube-lm > localhost.10915: Flags [.], ack 411, win 1577, options [nop,nop,TS val 1569612851 ecr 1569612851], length 0
E..4]O@.@..r..........*..C_*U.5....).(.....
].d3].d3................



Passando a senha de forma segura

Certo, vimos que criando dessa forma estamos fazendo da maneira insegura. Então como resolver isso? Simples, basta usando o comando password. Usando ele, a senha é enviada de forma segura, criptografada.


SQL> password user_teste
Changing password for user_teste
New password:
Retype new password:
Password changed




Olhando o tcpdump, podemos ver que não temos mais a senha em texto claro ela está criptografada.

15:34:16.832537 IP localhost.22189 > localhost.ncube-lm: Flags [P.], seq 3439:3915, ack 4177, win 1547, options [nop,nop,TS val 903835646 ecr 903788127], length 476
E.....@.@.7L........V...q/.5..7f...........
5.o.5.._...........k. ............s.........
.......................................
user_teste.....AUTH_SESSKEY.............AUTH_NEWPASSWORD@...@553465285F6B246026CB86B4FC2BEBC4A5BBE78BE265EC12A0A0146CAE0FFEB4.........AUTH_TERMINAL.....pts/1.........AUTH_PROGRAM_NM(...(sqlplus@myhost (TNS V1-V3).........AUTH_MACHINE.....tjoth03.tj.ce.gov.br.........AUTH_PID.....2536.........AUTH_SID.....oracle.........AUTH_ALTER_SESSION%...%ALTER SESSION SET TIME_ZONE='-03:00'.....................
15:34:16.834641 IP localhost.ncube-lm > localhost.22189: Flags [P.], seq 4177:4326, ack 3915, win 464, options [nop,nop,TS val 903835648 ecr 903835646], length 149
E....f@.@.............V...7fq/.............
5.p.5.o......................................................................6................#..............................................................................
15:34:16.834713 IP localhost.22189 > localhost.ncube-lm: Flags [.], ack 4326, win 1575, options [nop,nop,TS val 903835648 ecr 903835648], length 0
E..4..@.@.9'........V...q/....7....'.(.....
5.p.5.p.................





Em resumo

Vimos a forma "errada" ou não segura de se criar ou alterar um usuário, então agora vou mostrar a forma segura. Lembrando que a senha em texto claro só pode ser vista se estiver usando uma conexão remota e sem criptografia.

Se for alterar a senha de um usuário

NUNCA use:

alter user <usuario> identified by suasenha;

USE:

password <usuario>




Se estiver criando um novo usuário:

NUNCA use:

create user <usuario> identified by suasenha;

USE:

18c/19c - create user <usuario> password <senha>

menor ou igual 12.2 - create user <usuario> identified externally;

                                     password <usuario>



 








Comentários

Postagens mais visitadas deste blog

Configurando a política de retenção de backups no RMAN

                       Configurando a politica de reten çã o de backups no RMAN        O objetivo deste post é explicar como podemos configurar a reten çã o de backups na poderosa ferramenta de backup do bando de dados Oracle RMAN. Podemos configurar nossa pol í tica tendo por base dois tipos: janela de recupera çã o (recovery window) ou redundãncia (redundancy). Abaixo iremos abordar os dois tipos.       Para identificar qual dos dois tipos o RMAN está usando, use: RMAN> show retention policy; Política baseada em redundância CONFIGURE RETENTION POLICY TO REDUNDANCY 1; Política baseada em janela de recuperação CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS; ·        Política baseada em redund â ncia ( REDUNDANCY )       De uma maneira bem simples e objetiva, o par â metro REDUNDANCY especifica quantos backups full ou incremental level 0 de cada datafile o RMAN vai manter, os demais são considerados obsoletos. Veja o exemplo abaixo

Permissões necessárias para criar triggers no Oracle

Há pouco tempo passei por um problema durante a criação de uma trigger de LOGON na versão 12c do banco de dados Oracle. Estava com alguns problemas em uma aplicação que tinha uma trigger de Logon. A trigger em si era bem simples, vou por o código mais abaixo, o problema é que ela estava criada dentro do usuário SYSTEM. Provavelmente foi a maneira mais fácil e preguiçosa de criar o objeto, uma vez que o SYSTEM já possui todas as permissões necessárias para criação. Porém isso não uma boa prática. Então resolvi tirar do SYSTEM e jogar para o usuário dono dos objetos da aplicação. Quando fui tentar criar o objeto no SCHEMA dono dos objetos da aplicação, recebi um erro com falta de permissões: ORA-01031: insufficient privileges . O erro ocorreu porque estava esquecendo de conceder a role ADMINISTER DATABASE TRIGGER para o usuário. Em resumo, as permissões necessárias para criação de uma trigger: CREATE TRIGGER - para criar uma trigger no seu próprio esquema (SCHEMA) CREATE AN

ORA-01623 ORA-00312 - Removendo redo logs

Após realizar um restore de um ambiente de Oracle RAC para um single instance usando snapshot de storage, tentei recriar os redo logs recebi o seguinte erro durante a exclusão de um grupo de discos. SQL> alter database drop logfile group 2; ORA-01623: o log 2 é o log atual para a instância UOW (thread 1) - não é possível eliminar ORA-00312: thread 2 do log 1 on-line: '+DATA/UOW/ONLINELOG/group_2.1638.1051804433' ORA-00312: thread 2 do log 1 on-line: '+DATA/UOW/ONLINELOG/group_2.981.1051804433' O erro quer dizer que o grupo de redo pertence a outra thread. Quer dizer que ele pertence a outra instância do ambiente RAC. Como no meu caso não precisarei mais dela, basta usar o comando: SAL> alter database disable thread 2; Database altered.   Usei o SQL abaixo para gerar os comandos para excluir os redo logs SQL> select distinct 'alter database drop logfile group '||(group#)||';' from v$log where thread#=2; 'ALTERDATABASEDROPLOGFILEGROUP'||(G