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

Mário Reis mariodosreyx em gmail.com
Sáb Jul 10 12:00:17 -03 2010


Amigo,

Com um pouco mais de imaginação este Query deve quebrar seu galho:

SELECT
RDB$GET_CONTEXT('SYSTEM','DB_NAME') AS SYS_DBASE,
RDB$GET_CONTEXT('SYSTEM', 'NETWORK_PROTOCOL') AS SYS_PROTOCOL,
RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS')  AS  SYS_IP_ADDRESS,
RDB$GET_CONTEXT('SYSTEM', 'CURRENT_USER') AS SYS_USER_ID,
RDB$GET_CONTEXT('SYSTEM','SESSION_ID') AS SYS_SESSION,
RDB$GET_CONTEXT('SYSTEM','TRANSACTION_ID') AS SYS_TTR,
RDB$GET_CONTEXT('SYSTEM','ISOLATION_LEVEL') AS SYS_READ,
CURRENT_DATE AS SYS_DTSERVER
FROM
RDB$DATABASE
Abr. Mário

No dia 10 de Julho de 2010 13:01, Fábio Henrique Beverari <
fhbeverari em gmail.com> escreveu:

> 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
>



-- 
C/Melhores cumprimentos
Mário Agostinho Reis

Esta mensagem contém informação de natureza confidencial e é
exclusivamente dirigida ao(s) destinatário(s) indicado(s). Se, por engano,
receber este email agradecemos que não o copie nem o reenvie e que nos
notifique do ocorrido através do email de resposta.



Mais detalhes sobre a lista de discussão lista