[firebase-br] Como recuperar o IP que disparou a trigger

Fábio Henrique Beverari fhbeverari em gmail.com
Sáb Jul 10 10:01:13 -03 2010


Pessoal bom dia!

Estou desenvolvendo um sistema de auditoria em banco de dados Firebird
2.1.3, quero gravar um log de delete, update e insert em uma tabela chamada
"LOG", minha idéia foi a seguinte:

1º Criar uma coluna na minha tabela "USUARIO" com um ID que será o
meu mon$attachments_ID para pegar o ID da conexão(mon$attachments_ID) do
usuario no login da aplicação;
até ai tudo bem com esse select "select * from mon$attachments" eu faço
isso;
2º Usuário realiza suas operações normais de Insert, Update e delete, e a
cada ação minha trigger dispara um log(um insert na tabela LOG);
3º Dentro dessa trigger preciso de uma rotina que descubra o IP de quem a
disparou, por que dentro da tabela mon$attachments possui o IP da conexão;

Alguém tem alguma idéia de como criar esse rotina dentro da trigger??
Abaixo minha trigger de exemplo:
Obs. A tabela LogItens são as colunas da tabela


CREATE OR ALTER TRIGGER TR_BANCO_LOG FOR BANCO
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0
AS
  DECLARE VARIABLE USER_NAME smallint;
  DECLARE VARIABLE TIPO_OP VARCHAR(15);
  declare variable NUMID INTEGER;
begin

  --Aqui minha rotina para recuperar o IP que disparou a trigger
:USER_NAME


  if (INSERTING) then
    TIPO_OP = 'INSERT';
  if (UPDATING) then
    TIPO_OP = 'UPDATE';
  if (DELETING) then
    TIPO_OP = 'DELETE';

   select max(IDLOG +1) as maximo from LOG into :numid;

   insert into "LOG" (idlog,datahora, usuario, tabela, operacao, pkey1,
pkey1_value)
   values (:numid,'NOW', :USER_NAME , 'BANCO', :TIPO_OP, 'CODRED',
NEW.codred);

   insert into logitens (idlog, coluna, old_value, new_value)
   values (:numid,'CODRED',OLD.codred,NEW.codred);

   insert into logitens (idlog, coluna, old_value, new_value)
   values (:numid,'DES1',OLD.des1,NEW.des1);

   insert into logitens (idlog, coluna, old_value, new_value)
   values (:numid,'DES2',OLD.des2,NEW.des2);

   insert into logitens (idlog, coluna, old_value, new_value)
   values (:numid,'DES3',OLD.des3,NEW.des3);

   insert into logitens (idlog, coluna, old_value, new_value)
   values (:numid,'DES4',OLD.des4,NEW.des4);

   insert into logitens (idlog, coluna, old_value, new_value)
   values (:numid,'NUMAGE',OLD.numage,NEW.numage);

   insert into logitens (idlog, coluna, old_value, new_value)
   values (:numid,'NUMBAN',OLD.numban,NEW.numban);

   insert into logitens (idlog, coluna, old_value, new_value)
   values (:numid,'NUMCON',OLD.numcon,NEW.numcon);

   insert into logitens (idlog, coluna, old_value, new_value)
   values (:numid,'GERAL',OLD.geral,NEW.geral);

   insert into logitens (idlog, coluna, old_value, new_value)
   values (:numid,'INTERNET',OLD.internet,NEW.internet);
end



Mais detalhes sobre a lista de discussão lista