Modo Simulação

Ok, você foi lá, fez toda a captura de privilégios usando o DBMS_PRIVILEGE_CAPTURE e outros métodos, mas mesmo assim fica aquela dúvida: E se aparecer algo novo?
Ao implementar regras com o Database Vault, essa é uma das principais preocupações. Porém, essa inquietação desaparece quando se descobre o modo simulation.
O modo simulation permite implementar uma security rule e colocar as command rule pertencente a ela em modo de simulação. Assim, se algum aplicativo violar a regra que você implementou, ele ainda conseguirá acessar os dados normalmente, mas você poderá identificar a violação por meio dos logs de auditoria. Esses logs mostram quem "violou" a regra que você mapeou anteriormente. Como você fez um longo trabalho de mapeamento, em teoria, apenas as exceções devem aparecer.
Com o modo simulation, você pode deixar a regra rodando durante uma semana, por exemplo, e depois verificar na view de auditoria as possíveis violações. Após esse período de testes, será possível ativar a regra de forma definitiva, sem o risco de interromper a produção.
Agora, vamos ver como isso funciona na prática.
No artigo anterior, João não podia modificar a tabela salário. Então, o que faremos será alterar a command rule para que fique em modo simulation. Dessa forma, ela não impedirá o usuário João de modificar os dados, mas notificará o evento na view DBA_DV_SIMULATION_LOG.
Uma informação importante é que é a command rule que fica em modo simulation, e não a security rule.
Verificando se tem algum registro na DBA_DV_SIMULATION_LOG
SQL> show user
USER is "DBV_ADMIN"
SQL> select * from dba_dv_simulation_log order by timestamp desc ;
no rows selected
Confirmando que o usuário João não tem acesso de alteração a tabela salario.
SQL> show user
USER is "JOAO"
SQL> select * from app.salario ;
ID NOME SALARIO
---------- -------------------------------------------------- --------------
1 João Silva 3000
2 Maria Oliveira 4500
3 Carlos Santos 5000
5 Diogo 2700
6 Luiza Ferreira 6100
7 Fernanda Lima 3800
8 Roberto Faria 2900
9 Claudia Mendes 5300
10 Tiago Barbosa 4700
SQL> update app.salario set salario=10000 where id=5 ;
update app.salario set salario=10000 where id=5
*
ERROR at line 1:
ORA-47306: 20002: Access denied: You do not have DML privileges.
Aqui está claro que não temos acesso: ORA-47306: 20002: Access denied: You do not have DML privileges.
Agora vou colocar a command rule de update em modo simulation, caso queria entender melhor como eu as criei o link do artigo anterior está aqui.
SQL> BEGIN
DVSYS.DBMS_MACADM.UPDATE_COMMAND_RULE(
command => 'UPDATE',
rule_set_name => 'RULE_SET_DML',
object_owner => 'APP',
object_name => 'SALARIO',
enabled => DBMS_MACUTL.G_SIMULATION -- <<< aqui esta a flag de simutaion.
);
END;
/ 2 3 4 5 6 7 8 9 10
PL/SQL procedure successfully completed.
Verificando Status da command rule:
SQL> col command for a13
col RULE_SET_NAME for a20
col object_owner for a10
col object_name for a20
col enable for a4
select COMMAND, RULE_SET_NAME,OBJECT_OWNER,OBJECT_NAME,ENABLED
from DBA_DV_COMMAND_RULE
where object_owner='APP';
Podemos ver que o campo enable esta com o valor do Simulation.
Agora, tentaremos realizar o update na tabela APP.SALARIO utilizando o usuário João.
SQL> show user
USER is "JOAO"
SQL> update app.salario set salario=10000 where id=5 ;
1 row updated.
SQL> commit ;
Commit complete.
Agora que o update foi realizado com sucesso, vamos dar uma olhada na view de auditoria do DBV.
SELECT
USERNAME,
COMMAND,
VIOLATION_TYPE,
OBJECT_OWNER,
OBJECT_NAME,
SQLTEXT,
DATABASE_IP,
MACHINE
FROM DBA_DV_SIMULATION_LOG;
Como podemos ver, o DBV registrou com sucesso o acesso do usuário João à tabela APP.SALARIO. Esse modo de simulação, como falado antes, é muito útil para mapear e identificar acessos que não foram previstos no mapeamento inicial das permissões, sendo que somente os usuários que não têm permissão(que violaram a regra do DBV) serão registrados na view de auditoria.
Como sempre, recomendo validar as regras de forma exaustiva nos ambientes de homologação.






