[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