quinta-feira, 20 de dezembro de 2012

Movendo os objetos de auditoria para outra tablespace


A auditoria do banco de dados Oracle, quando ativada os objetos deste dispositivo, são criados nas tablespaces SYS ou SYSMAN, dependendo da versão do Oracle.

Neste artigo vamos dar uma repassada nas opções e comandos básicos de auditoria e também apresentaremos uma solução de contorno para alterar a tablespace onde os objetos de auditoria são criados.

Inicialmente é necessário ativar a auditoria, para tanto deve-se configurar o parâmetro AUDIT_TRAIL. Para essa alteração é necessário reiniciar a base de dados, porque esse parâmetro é estático.  O parâmetro AUDIT_TRAIL permite os valores indicados abaixo.

·        none – Desabilita a auditoria (valor pré configurado);
·        os – Habilita a auditoria, coletando informações pertinentes ao Sistema Operacional;
·        db – Habilita a auditoria, coletando informações pertinentes ao banco de dados (visão SYS.AUD$);
·    db,extended – db - Habilita a auditoria, coletando informações pertinentes ao  banco de dados (visão SYS.AUD$) e adiciona os valores pertinentes as colunas SQLBIND e SQLTEXT (da visão SYS.AUD$);
·       xml – Habilita a auditoria, coletando informações pertinentes ao  Sistema Operacional em formato XML;
·    xml,extended – Habilita a auditoria, coletando informações pertinentes ao Sistema Operacional incluindo as SQLBIND e SQLTEXT  (da visão SYS.AUD$);

Na maioria dos casos a opção de auditoria (db ou db,extend) é a mais utilizada, permitindo verificar detalhes dos acessos no banco de dados. Porém essa opção gera um grande volume de informação na visão “SYS.AUD$”. Este objeto fica armazenado na tablespace SYSTEM, o que muitas vezes ocasiona estouro, parando o banco de dados.

Uma opção para corrigir esse problema é realizar a movimentação dos objetos de auditoria para outra tablespace, de modo a melhorar a administração de capacidades da auditoria Oracle.

A seguir os passos necessários para a mudança:

1. Desativar a auditoria se ela estiver habilitada:

SQL> alter system set audit_trail=none scope=spfile;

2. Reiniciar o banco de dados:

SQL> startup;

3. Criar uma nova tablespace para armazenar os objetos da auditoria:

SQL> create tablespace tbs_auditoria
   2 datafile ’/home/oracle/oradata/dbf/tbs_audit_01.dbf’
   3 size 2g autoextend on next 1g maxsize 4g;

4. Conectar como SYS, executar os passos abaixo:

SQL> conn sys/**** as sysdba

SQL> create table system.aud$ tablespace tbs_auditoria
   2 as select * from aud$;

SQL> create index system.i_aud1
   2 on system.aud$(sessionid, ses$tid) tablespace tbs_auditoria;

SQL> rename aud$ to aud$_temp;

SQL> create view aud$ as select * from system.aud$;

5. Conectar com o usuário SYSTEM e conceder os privilégios abaixo:

SQL> conn system/****

SQL> grant all on aud$ to sys with grant option;

SQL> grant delete on aud$ to delete_catalog_role;

6. Reativar a auditoria, utilizar os passos abaixo:

SQL> alter system set audit_trail=DB scope=spfile;

SQL> startup;

7. Recriar as visões da auditoria do dicionário de dados:

SQL> @?/rdbms/admin/cataudit.sql

Apartir desses passos executados os objetos de auditoria serão criados na tablespace TB_AUDITORIA.

Abaixo alguns exemplos do comando AUDIT.

AUDIT ALL BY BY ACCESS;
AUDIT EXECUTE PROCEDURE BY BY ACCESS;
AUDIT UPDATE TABLE,
      SELECT TABLE,
      INSERT TABLE,
      DELETE TABLE BY BY ACCESS;

Os comandos acima realizam auditoria de todos os comandos que o executar no banco de dados (DDL, DML, Logon e Logoff).

Também é possível realizar auditoria de um objeto específico, independente do usuário que o acessa e também por uma sessão inteira. O comando ficaria assim:

AUDIT ALL ON [OWNER].[TABELA] BY SESSION;

Para desabilitar a auditoria de determinado objeto deve-se utilizar o comando “NOAUDIT”, conforme o exemplo abaixo:

NOAUDIT ALL ON [OWNER].[TABELA] BY SESSION;

Dica importante:  O comando “AUDIT ALL” habilita a auditoria para todo o banco e para todas as atividades. Recomenda-se analisar a real necessidade para utilização deste comando num ambiente de produção. Pois esse comando gera lentidão no banco de dados e também um volume muito grande de informação armazenada da auditoria no banco de dados.

Nota Final: Embora exista um Note da Oracle (72460.1) para a execução desta atividade, a Oracle indica que esse procedimento não é suportado pelo suporte, portanto em ambientes críticos deve-se consultar o Suporte da Oracle para detalhes.

Referências:  Oracle Database, Security Guide 11g Release 2 (11.2);
                           Oracle Label Security, Administrator’s Guide 11g Release 2 (11.2).



MSc. Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com