Artigo SQL Magazine 17 - Implementando auditoria no Oracle9i

Artigo da Revista SQL Magazine - Edição 17.

Clique aqui para ler esse artigo em PDF.

Clique aqui para ler todos os artigos desta edição

Implementando auditoria no Oracle9i

 

por Rodrigo Salviatto

 

O DBA de uma empresa precisa se preocupar diariamente com a segurança de um dos ativos mais importantes que ela possui: os dados. Você já deve ter se questionado, por exemplo: Quem removeu aquela visão? Quem alterou os dados da tabela de produtos? Cadê os sinônimos? Quem removeu a stored procedure que alimentava o sistema de faturamento?

Ao implementar auditoria no Oracle 9i, você poderá obter todas as respostas para estas perguntas. A auditoria se tornou uma ferramenta poderosa para identificar as ações maliciosas ou acidentais no banco de dados. Neste artigo iremos explicar como funciona e como proceder para implementá-la.

 

Primeiros passos

O Oracle9i possui importantes recursos de auditoria para diversas ações que ocorrem no banco de dados. Há algumas operações que são sempre auditadas como, o início e o fim de uma instância, os logins como SYSDBA e SYSOPER. Estas informações podem ser encontradas no registro de alerta (alert.log) de seu banco de dados, bem como informações auditadas sobre troca de registro (undo.log), pontos de verificação (checkpoints) e tablespace colocados off-line ou online sem que o DBA efetue qualquer alteração no banco de dados.

Existe também outro tipo de auditoria onde o DBA poderá configurar o banco de dados para registrar todas as ações de comandos bem sucedidos ou não. Iremos estudar três tipos de auditoria:

• Ações no banco de dados;

• Tentativas de login;

• Acesso aos objetos.

 

Para configurar a auditoria no Oracle9i, você deverá incluir o parâmetro AUDIT_TRAIL no arquivo de parâmetros de inicialização init.ora.

 

AUDIT_TRAIL=TRUE

 

Não é um parâmetro dinâmico, portanto após incluí-lo no arquivo, você deverá parar e reiniciar a instância do Oracle. Veja abaixo os valores aceitos para este parâmetro:

OS: ativa a auditoria, gravando as informações no controle de auditoria do sistema operacional. No Windows, os logs são escritos no event viewer. Já no Unix e Linux, os registros são gravados no diretório identificado pelo parâmetro de inicialização AUDIT_FILE_DEST.

DB ou TRUE: ativa a auditoria, gravando as informações na tabela SYS.AUD$.

NONE: desativa a auditoria.

 

A tabela AUD$ faz parte do dicionário de dados e está criada no tablespace SYSTEM. Portanto, vale ressaltar que todo cuidado deve ser tomado para que a auditoria não atrapalhe o gerenciamento de espaço alocado para este importante tablespace. Muitas empresas costumam mover a tabela SYS.AUD$ do tablespace SYSTEM, para outro tablespace evitando assim problemas com espaço em disco.

Para eliminar os registros antigos da tabela SYS.AUD$, o usuário deverá possuir o papel DELETE _CATALOG_ROLE. Para conceder esse direito devemos fazer o seguinte:

 

SQL> GRANT DELETE_CATALOG_ROLE TO SCOTT;

Concessão bem-sucedida

 

Uma vez concedido o direito, podemos efetuar a remoção de registros da tabela SYS.AUD$ (ver Listagem 1).

 

SQL> CONNECT SCOTT@ORCL

Conectado.

SQL> DELETE FROM SYS.AUD$;

12 linhas excluídas;

Listagem 1. Usuário SCOTT efetuando a remoção de registros da tabela SYS.AUD$.

 

O usuário que for auditar o banco de dados deverá possuir o papel de AUDIT SYSTEM. Veja como atribuir esse papel abaixo:

 

SQL> GRANT AUDIT SYSTEM TO SCOTT;

Concessão bem-sucedida

 

Auditorias de login

É possível registrar informações todas as vezes que um usuário efetuar logon (tendo sucesso ou não) no banco de dados. Para fazer isso, devemos executar o comando apresentado abaixo:

 

SQL> AUDIT SESSION;

Auditoria bem-sucedida

 

Caso haja a necessidade de auditar apenas as tentativas de logon com sucesso ou não, utilize os comandos mostrados abaixo. Para auditar tentativas de logon com sucesso:

 

SQL> AUDIT SESSION WHENEVER SUCCESSFUL;

Auditoria bem-sucedida

 

Para auditar tentativas de logon sem sucesso:

 

SQL> AUDIT SESSION WHENEVER NOT SUCCESSFUL;

Auditoria bem-sucedida

 

Por fim, para desativar a auditoria de sessão, proceda conforme o código abaixo:

 

SQL> NOAUDIT SESSION;

Auditoria bem-sucedida

 

Para cada operação de auditoria, o Oracle produz um registro na tabela SYS.AUD$ contendo as seguintes informações:

• O usuário que executou a operação: SCOTT;

• O tipo de operação: GRANT, UPDATE, DELETE, INSERT, AUDIT;

• O objeto envolvido na operação: nome da tabela, visão, índice, etc.;

• A data e hora da operação;

• O terminal de onde foi executada a operação: nome da estação/servidor de onde foi executado o comando/operação;

• Entre outras.

 

Veja as colunas existentes na tabela SYS.AUD$ na Listagem 2.

 

SQL> DESC SYS.AUD$

 

NameNull?Type

----------------------------- -------- ----------------

SESSIONIDNOT NULL NUMBER

ENTRYIDNOT NULL NUMBER

STATEMENTNOT NULL NUMBER

TIMESTAMP#NOT NULL DATE

USERIDVARCHAR2(30)

USERHOSTVARCHAR2(128)

TERMINALVARCHAR2(255)

ACTION#NOT NULL NUMBER

RETURNCODENOT NULL NUMBER

OBJ$CREATORVARCHAR2(30)

OBJ$NAMEVARCHAR2(128)

AUTH$PRIVILEGESVARCHAR2(16)

AUTH$GRANTEEVARCHAR2(30)

NEW$OWNERVARCHAR2(30)

NEW$NAMEVARCHAR2(128)

SES$ACTIONSVARCHAR2(19)

SES$TIDNUMBER

LOGOFF$LREADNUMBER

LOGOFF$PREADNUMBER

LOGOFF$LWRITENUMBER

LOGOFF$DEADNUMBER

LOGOFF$TIMEDATE

COMMENT$TEXTVARCHAR2(4000)

CLIENTIDVARCHAR2(64)

SPARE1VARCHAR2(255)

SPARE2NUMBER

OBJ$LABELRAW(255)

SES$LABELRAW(255)

PRIV$USEDNUMBER

SESSIONCPUNUMBER

Listagem 2. Colunas da visão de dicionário de dados AUD$." [...] continue lendo...

Artigos relacionados