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

Zottis bzottis em ig.com.br
Sáb Jul 10 11:51:24 -03 2010


Eu faço assim:

Trigger:
.......
  EXECUTE PROCEDURE sp_auditoria (OLD.EXCLUIDO_POR, 'CAIXA', 'EXCLUIR',
OLD.CAIXANO, Rdb$get_context('SYSTEM' , 'CLIENT_ADDRESS' ),
     rdb$get_context('SYSTEM', 'NETWORK_PROTOCOL'))  RETURNING_VALUES
:VAR_CODIGO;

..........
Procedure:

SET TERM ^ ;

CREATE OR ALTER PROCEDURE SP_AUDITORIA (
    cod_usuario_ integer,
    tabela_ varchar(35),
    operacao_ varchar(15),
    chave_ integer,
    endereco_ varchar(1000),
    network_protocol_ varchar(1000))
returns (
    codigo_ integer)
as
BEGIN

  CODIGO_ = GEN_ID(gen_auditoria, 1);
  INSERT INTO auditoria (
    CODIGO, DATA_CAD, HORA, COD_USUARIO, TABELA, OPERACAO, CHAVE, ENDERECO,
NETWORK_PROTOCOL)
    VALUES (:CODIGO_, current_date,current_time, :cod_usuario_, :tabela_,
:operacao_, :chave_,:endereco_, :NETWORK_PROTOCOL_);
END^

SET TERM ; ^
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Fábio Henrique Beverari
Enviada em: sábado, 10 de julho de 2010 10:01
Para: FireBase
Assunto: [firebase-br] Como recuperar o IP que disparou a trigger

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
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista