Pessoal, boa tarde.
Estou com uma dúvida e acredito que ela se encaixe melhor nessa categoria.
Eu precisaria manter um log com os comandos executados por usuários no banco de dados.
Por exemplo, se um usuário rodar uma query "SELECT * FROM TABELA", gostaria de armazenar o usuário, horário e o comando executado.
É possível fazer isso?
Obrigado.
Manter logs de comandos efetuados
- stcoutinho
- Moderador
- Mensagens: 850
- Registrado em: Qua, 11 Mai 2011 5:15 pm
- Localização: são Paulo - SP
Olá jks1903,
O ORACLE não dispõe de TRIGGERS que capturem, por exemplo um SELECT que seja feito em uma determinada tabela.
ENTRETANTO, o ORACLE oferece a package DBMS_FGA, que você pode utilizar para gerar uma espécie de auditoria para comandos de SELECT disparado contra tabelas.
Existe um excelente artigo que descreve em detalhes - didaticamente - como implementar uma auditoria como esta.
O link deste artigo ("Select Trigger in Oracle Database – introducing Fine Grained Auditing") é o seguinte :
http://technology.amis.nl/2005/09/26/se ... -auditing/
Espero que o artigo lhe ajude a criar o controle que você deseja.
Pode ser que existam outras formas de criar este tipo de controle. Talvez os foristas possam lhe sugerir outras soluções neste sentido.
Abraços,
Sergio Coutinho
O ORACLE não dispõe de TRIGGERS que capturem, por exemplo um SELECT que seja feito em uma determinada tabela.
ENTRETANTO, o ORACLE oferece a package DBMS_FGA, que você pode utilizar para gerar uma espécie de auditoria para comandos de SELECT disparado contra tabelas.
Existe um excelente artigo que descreve em detalhes - didaticamente - como implementar uma auditoria como esta.
O link deste artigo ("Select Trigger in Oracle Database – introducing Fine Grained Auditing") é o seguinte :
http://technology.amis.nl/2005/09/26/se ... -auditing/
Espero que o artigo lhe ajude a criar o controle que você deseja.
Pode ser que existam outras formas de criar este tipo de controle. Talvez os foristas possam lhe sugerir outras soluções neste sentido.
Abraços,
Sergio Coutinho
Ajudou mesmo.
Na verdade minha intenção é capturar os UPDATES ao invés dos SELECTs, porém o que eu não conseguia era como pegar o que foi executado.
Vou adaptar isso em uma trigger de UPDATE mesmo para ver se consigo.
Vlw pela ajuda.
Na verdade minha intenção é capturar os UPDATES ao invés dos SELECTs, porém o que eu não conseguia era como pegar o que foi executado.
Vou adaptar isso em uma trigger de UPDATE mesmo para ver se consigo.
Vlw pela ajuda.
-
- Rank: Estagiário Sênior
- Mensagens: 8
- Registrado em: Dom, 20 Mai 2012 2:29 pm
- Contato:
Ola jks1903, tudo bem.
já passei por isso algumas vezes e tive q montar uma trigger para pegar os eventos do update , segue abaixo o script que montei , espero que lhe ajude.
já passei por isso algumas vezes e tive q montar uma trigger para pegar os eventos do update , segue abaixo o script que montei , espero que lhe ajude.
CREATE OR REPLACE TRIGGER "GLEISON"."LOGALTERACAO"
AFTER
UPDATE OF QTINDENIZ
ON PCEST
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
vsmaquina VARCHAR2(80);
vsusuario VARCHAR2(80);
vsprograma VARCHAR2(80);
BEGIN
BEGIN
SELECT SUBSTR(terminal, 1, 80),
SUBSTR(osuser, 1, 80),
SUBSTR(program, 1, 80)
INTO vsmaquina, vsusuario, vsprograma
FROM usuarios_logados
WHERE audsid = USERENV('SESSIONID')
AND rownum = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
vsmaquina := SYS_CONTEXT('USERENV', 'TERMINAL');
vsusuario := SYS_CONTEXT('USERENV', 'OS_USER');
vsprograma := SYS_CONTEXT('USERENV', 'MODULE');
END;
INSERT INTO LOGALTERACAO (CODPROD,QTANTES,QTDEPOIS,MAQUINA,USUARIO,PROGRAMA,DATA)
VALUES (:NEW.CODPROD,:OLD.QTINDENIZ,:NEW.QTINDENIZ,VSMAQUINA,VSUSUARIO,VSPROGRAMA,SYSDATE );
END LOGALTERACAO;
ALTER TRIGGER "GLEISON"."LOGALTERACAO" ENABLE
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes