Auditoria ambiente Oracle

No post de hoje vou mostrar como criar uma auditoria simples no ambiente Oracle.

1- Definir roles com respectivos Usuários;
2- Definir os usuários que estarão nas roles;
3- Definir permissões que as roles podem ter;

— Criando a role com respectivos papeis do teu ambiente

CREATE ROLE LEITURA;
CREATE ROLE GRAVACAO;

— Incluindo o usuário CESAR na role respectiva sempre com acessos restritivos

GRANT LEITURA TO CESAR;
GRANT GRAVACAO TO CESAR;

— Incluindo permissões nas roles

GRANT SELECT PRODUCAO.COMPRAS TO LEITURA;
GRANT INSERT,UPDATE,DELETE ON PRODUCAO.COMPRAS GRAVACAO;

— Verificando e habilitando auditoria salvando informações em uma database, pois podemos salvar em arquivo também:
sqlplus> show parameter audit;
sqlplus> none — desativado
sqlplus> alter system set audit_trail=db SCOPE=spfile;
sqlplus> shutdown immediate;
sqlplus> startup open;
sqlplus> show parameter audit;
sqlplus> db — habilitado

— Auditoria de DDL
— Exemplo onde CESAR é o schema

AUDIT ALL BY CESAR BY ACCESS;
AUDIT EXECUTE PROCEDURE BY CESAR BY ACCESS;

— Agora temos uma procedure simples para auditar select, insert, update e delete no schema producao:
— Nesta procedure todas as tabelas do schema PRODUCAO serão auditadas para insert, select, update e delete
— Sera criado uma politica com o nome REGRA_AUDITORIA

CREATE OR REPLACE PROC_AUDITORIA IS
CURSOR GET_TAB IS
SELECT OWNER,OBJECT_NAME FROM DBA_OBJECTS
WHERE OWNER IN(‘PRODUCAO’) — PODE SER PASSADO VARIOS SCHEMAS SEPARADOS POR VIRGULA
AND OBJECT_TYPE IN (‘TABLE’,’VIEW’)
AND OBJECT_NAME NOT IN (
SELECT O.NAME
FROM
SYS.USER$ U,
SYS.OBJ$ O,
SYS.FGA$ F
WHERE
U.USER# = O.OWNER#
AND
F.OBJ# = O.OBJ#
);
BEGIN
FOR T IN GET_TAB LOOP
DBMS_FGA.ADD_POLICY(OBJECT_SCHEMA => T.OWNER,
POLICY_NAME => ‘REGRA_AUDITORIA’,
OBJECT_NAME => T.OBJECT_NAME,
STATEMENT_TYPES => ‘INSERT, UPDATE, DELETE, SELECT’);
END LOOP;
END;

— VERIFICANDO OBJETOS AUDITADOS

SELECT OWNER,OBJECT_NAME FROM DBA_OBJECTS
WHERE OWNER IN(‘PRODUCAO’)
AND OBJECT_TYPE IN (‘TABLE’,’VIEW’)
AND OBJECT_NAME NOT IN (
SELECT O.NAME
FROM
SYS.USER$ U,
SYS.OBJ$ O,
SYS.FGA$ F
WHERE
U.USER# = O.OWNER#
AND
F.OBJ# = O.OBJ#
);

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s