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
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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo