Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 511643
            [titulo] => Trigger Auditoria Web
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-02-23 14:01:51
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 269142
            [status] => A
            [isExample] => 
            [NomeUsuario] => William 
            [Apelido] => William (Devwilliam)
            [Foto] => 269142_20150809195205.jpg
            [Conteudo] => Mariam, constantemente vejo colegas desenvolvendo sistemas com auditorias de ações executadas em bancos de dados através de triggers, principalmente com MySQL só que quando  analisam as tabelas de auditoria todas as ações são executadas pelo mesmo usuário geralmente "root" ou outro usuário do banco de  dados.

Isso porque não tem como você saber o usuário que está logado no sistema via trigger, porque na grande maioria das vezes tem um ou dois usuários criados no banco, mas no sistema existem vários usuários.

Então nessa situação existem 2 maneiras, ou você inseri via procedure ou executa os INSERTs na mão mesmo mas o disparo deverá ocorrer na aplicação sempre quer ocorrer uma operação de CRUD, assim você consegue gravar o usuário que está logado no momento.

Nos meus sistemas uso uma tabela de log com os seguintes campos:
ID
ID_USUARIO
ACAO_EXECUTADA
URL_ACESSADA
IP
DATA_HORA

Claro que podem ser acrescentados outros campos, mas apenas com esses campos já consegui me livrar de muita dor de cabeça com usuário reclamando de registro que some misteriosamente. ) )

Trigger Auditoria Web

Mariam
   - 23 fev 2015

Ola Pessoal
Preciso uma ajudinha, Estou desenvolvendo um sistema web em php, ela tem varios formularios que são cadastrados pelos usuários, Então, agora o que eu preciso
fazer é um trigger de auditoria que permita capturar as modifcações que o usuario faz. Vocês tem alguma idea de como fazer ??

Post mais votado

William (devwilliam)
   - 23 fev 2015

Mariam, constantemente vejo colegas desenvolvendo sistemas com auditorias de ações executadas em bancos de dados através de triggers, principalmente com MySQL só que quando analisam as tabelas de auditoria todas as ações são executadas pelo mesmo usuário geralmente "root" ou outro usuário do banco de dados.

Isso porque não tem como você saber o usuário que está logado no sistema via trigger, porque na grande maioria das vezes tem um ou dois usuários criados no banco, mas no sistema existem vários usuários.

Então nessa situação existem 2 maneiras, ou você inseri via procedure ou executa os INSERTs na mão mesmo mas o disparo deverá ocorrer na aplicação sempre quer ocorrer uma operação de CRUD, assim você consegue gravar o usuário que está logado no momento.

Nos meus sistemas uso uma tabela de log com os seguintes campos:
ID
ID_USUARIO
ACAO_EXECUTADA
URL_ACESSADA
IP
DATA_HORA

Claro que podem ser acrescentados outros campos, mas apenas com esses campos já consegui me livrar de muita dor de cabeça com usuário reclamando de registro que some misteriosamente.

Alan Mario
   - 23 fev 2015

Não sei muito sobre o Postgre, apenas o arroz com feijão mesmo, hehehe.

Eu achei os seguintes materiais.

http://www.devmedia.com.br/new-e-old-trigger-curso-postgresql-treinamento-de-banco-de-dados-parte-41/21768

http://pgbr.postgresql.org.br/2013/slides/54.pdf

Mariam
   - 23 fev 2015

Obrigada pela Resposta,

Eu já tinha feito um na mão mesmo, só que que cada vez tinha mais e mais formulários que auditar, então pensei em minimizar esforços mas... rsrsrs...
vejo que difícil fazer algo genérico por que aumentaria a complexidade ...

William (devwilliam)
   - 23 fev 2015

Se for pensar em gravar o usuário logado naquele instante fica complicado mesmo, suponhamos que você deixe somente o usuário padrão do PostgreSQL habilitado no servidor, todos as ações serão executadas pelo usuário "postgres", então fica sem sentido uma tabela de auditoria desse jeito.

Mariam
   - 23 fev 2015

Isso mesmo, agora tenho outra duvida. tem um jeito para capturar os dados modificados que não seja por trigger ..?

Mariam
   - 23 fev 2015

Isso mesmo, agora tenho outra duvida. tem um jeito para capturar os dados modificados que não seja por trigger ..?

William (devwilliam)
   - 23 fev 2015

O que foi alterado fica difícil, porque imagine uma tabela com 20 ou 30 campos seria impossível checar mudança campo por campo, eu gravo o Id do registro alterado.

Mariam
   - 27 fev 2015

Obrigada ! pelas respostas , já consegui fazer :D!!!

Thiago Santana
   - 27 fev 2015

Legal!
Se possível posta a solução, assim a galera que necessitar já terá o conteúdo disponível!