Auditando novas conexões

Existem duas maneiras de auditar conexões ao banco de dados.

Uma seria via trigger, que nos servidir muito bem, mas não serve para descobrir se você consguiu ou não conectar, ou seja você conseguiria cadastrar todas as conexões em seu banco, mas se alguem não conseguiu efetuar a conexão, por senha ou por qualquer outro motivo não saberemos.

A outra forma seria via auditoria do banco, a famosa “audit_trail”, mas se você habilitar a auditoria você pode auditar muitas coisa desnecessária e com isso multiplicar o tamanho de seu banco de dados.

Vou mostrar para vocês uma forma bem simplificada de auditar as conexões no banco de dados sem auditar “lixo”. Primeiramente teremos de verificar o parâmetro de auditoria no banco.

SQL> show parameter audit_trail

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------------
audit_trail                          string      DB

Este parâmetro deverá ser db ou db_extended, caso estiver como xml ou xml_extended até funcionará mas você não poderá verificar via banco conforme faremos neste post.

Para alterar este parâmetro você terá de reiniciar seu banco para que as alterações tenham efeito.


SQL> show parameter audit_trail

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------
audit_trail                          string      NONE
SQL> alter system set audit_trail='DB' scope=spfile;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.

Total System Global Area  451964928 bytes
Fixed Size                  1344812 bytes
Variable Size             281021140 bytes
Database Buffers          163577856 bytes
Redo Buffers                6021120 bytes
Database mounted.
Database opened.
SQL> show parameter audit_trail

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------
audit_trail                          string      DB

Agora vamos auditar quem conecta ou quem não consegue conectar.

Para efetuar tal procedimento resolvi criar um novo owner para efetuar tal processo.

SQL> create user lana_audit identified by lana;

User created.

SQL> grant connect to lana_audit;

Grant succeeded.

Agora vamos auditalo.

SQL> audit create session by lana_audit;

Audit succeeded.

Vamos conectar com este owner.

SQL> conn lana_audit/lana
Connected.
SQL> conn lana_audit/lana
Connected.
SQL> conn lana_audit/lana
Connected.
SQL> conn lana_audit/lana
Connected.
SQL> conn / as sysdba
Connected.
SQL>

Agora vamos rodar o select para ver estas conexões.

SQL> col OS_USERNAME for a30
SQL> col USERHOST for a30
SQL> select to_char(timestamp,'mm/dd/yy hh24:mi') ts,
  2  os_username, userhost, returncode
  3  from dba_audit_trail
  4  where username = 'LANA_AUDIT'
  5  order by timestamp;

TS             OS_USERNAME               USERHOST                  RETURNCODE
-------------- ------------------------- ------------------------- ----------
09/20/11 18:02 oracle                    producao                           0
09/20/11 18:02 oracle                    producao                           0
09/20/11 18:02 oracle                    producao                           0
09/20/11 18:02 oracle                    producao                           0

4 rows selected.                                                                       

Todos os resultados alem do “RETURNCODE” 0 é porque ocorreu algum erro ou falha de conexão.

SQL> conn lana_audit/lana1
ERROR:
ORA-01017: senha/nome do usuário inválido; log-on negado


Warning: You are no longer connected to ORACLE.
SQL> conn / as sysdba
Connected.
SQL> alter user lana_audit account lock;

User altered.

SQL> conn lana_audit/lana1
ERROR:
ORA-28000: a conta está bloqueada


Warning: You are no longer connected to ORACLE.
SQL> conn / as sysdba
Connected.
SQL> select to_char(timestamp,'mm/dd/yy hh24:mi') ts,
  2  os_username, userhost, returncode
  3  from dba_audit_trail
  4  where username = 'LANA_AUDIT'
  5  and RETURNCODE<>0
  6  order by timestamp;

TS             OS_USERNAME               USERHOST                 RETURNCODE
-------------- ------------------------- ------------------------ ----------
09/20/11 18:11 oracle                    producao                       1017
09/20/11 18:11 oracle                    producao                      28000

Com isso podemos identificar quem esta errando a senha de seu sistema.
Returncode 1017 = senha inválida “ORA-01017”
Returncode 28000 = Usuário inválido “ORA-28000”

%name Auditando novas conexões

Autor: Leandro Lana

Trabalho com banco de dados Oracle desde 2006, já trabalhei com as plataformas 9i, 10G, 11G, 12C, 18C, 19C e 21(ainda em testes).

Trabalhando atualmente como consultor Oracle na MigraTI Soluções em TI como administrador de banco de dados Oracle, SQL-Server, MySQL e Postgresql.

Contato: leandro.lana@migrati.com.br

Fone: (47) 9191-6052 / (47) 3328 0996

Certificações:

OCA 10G.

OCP 10G.

OCE Linux.

OCE RAC/Cluster.

MCP SQL-Server 2008.

MCITP SQL-Server 2008.

DB2 Fundamentals.