Pessoal, bom dia.
é o seguinte, estou em um trabalho de auditoria na empresa cliente. Por exemplo, eu tenho a tabela endereço e e tenho uma tabela de log "auditoria", nela vou ter os dados anterior e os dados novos (dados atualizados), porem quero também o IP da maquina de quem fez essa alteração, teria como ?
eu estou o usando o objeto SYS_CONTEXT('USERENV','IP_ADDRESS'), mas pelo que eu vi ele pega o IP da maquina local e não a que esta atualizando.
Essa tabela da auditoria, vai ser alimentada atraves de uma trigger que vou desenvolver, Se essa trigger estiver rodando no servidor o Ip sempre sera o mesmo, isso sai da regra. Teria como eu pegar o IP de quem está atualizando a tabela pelo Oracle?
desde já agradeço!!!
absssss
Duvidas para recuperar o IP!!!
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Pergunta, algum motivo especial para o uso do IP na sua auditoria?
Imaginando que cada usuário fisico tenha conta user, não bastaria dizer quem foi o User que efetuou a alteração?
"há mas o fulano sabe minha senha, não fui eu que fez a alteração...", Bom na empresa onde eu trabalho cada um é responsabilizado pelo seu usuário. Caso alguém sabe sua senha o problema é seu!
Imaginando que cada usuário fisico tenha conta user, não bastaria dizer quem foi o User que efetuou a alteração?
"há mas o fulano sabe minha senha, não fui eu que fez a alteração...", Bom na empresa onde eu trabalho cada um é responsabilizado pelo seu usuário. Caso alguém sabe sua senha o problema é seu!
-
- Moderador
- Mensagens: 1177
- Registrado em: Qui, 15 Out 2009 10:28 am
- Localização: Recife
veja na v$session, tem o nome da maquina lá
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Veja que legal:
SQL>SQL> select
2 SYS_CONTEXT('USERENV','IP_ADDRESS') MEU_IP
3 , SYS_CONTEXT('USERENV','TERMINAL') NOME_DA_MINHA_MAQUINA
4 , SYS_CONTEXT('USERENV','HOST') HOST_COMPLETO_MINHA_MAQUINA
5 , SYS_CONTEXT('USERENV','SERVER_HOST') HOST_DO_SERVIDOR
6 --
7 , UTL_INADDR.get_host_address('pcjoao') IP_DO_HOST_INFORMADO
8 , UTL_INADDR.get_host_name HOST_DO_SERVIDOR
9 , UTL_INADDR.get_host_name('172.16.2.81') HOST_DO_IP_INFORMADO
10 from dual
11 /
MEU_IP NOME_DA_MINHA_MAQUINA HOST_COMPLETO_MINHA_MAQUINA HOST_DO_SERVIDOR IP_DO_HOST_INFORMADO HOST_DO_SERVIDOR HOST_DO_IP_INFORMADO
--------------- ---------------------- ----------------------------- ------------------ --------------------- ------------------ ----------------------
10.2.1.126 ESTACAO19 GRUPO\ESTACAO19 oraserver01 172.16.2.81 pcjoao pcjoao
SQL>
-
- Moderador
- Mensagens: 1177
- Registrado em: Qui, 15 Out 2009 10:28 am
- Localização: Recife
legal essa hein, pratiacmente um DNS, rsrs
mas a duvida dele, é se dentro da trigger o userenv vai retornar o IP do client...
acho que não não é?...
mas a duvida dele, é se dentro da trigger o userenv vai retornar o IP do client...
acho que não não é?...
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Então, eu não testei pra ver.
Mas uma coisa que eu li:
http://download.oracle.com/docs/cd/B283 ... htm#i18574
SÓ TESTANDO pra saber o que acontece :-/
1. Crie um função que retorna o IP com SYS_CONTEXT('USERENV','IP_ADDRESS')
2. Crie uma trigger que executa essa função e salva na tabela o resultado.
Veja qual IP sai.
Depois, tenta mudar a função de AUTHID CURRENT_USER pra AUTHID CURRENT_USER DEFINER... Só pra ver se muda algo. DUVIDO que vai mudar :-/
Mas uma coisa que eu li:
http://download.oracle.com/docs/cd/B283 ... htm#i18574
Eu acho que isso é valido só pra PERMISSOES de banco. Creio que o IP sempre vai ser o do cliente, mesmo se for rodado via trigger.Using Invoker's Rights or Definer's Rights (AUTHID Clause)
A unit whose AUTHID value is CURRENT_USER is called an invoker's rights unit, or IR unit.
A unit whose AUTHID value is DEFINER is called a definer's rights unit, or DR unit.
An anonymous block always behaves like an IR unit.
A trigger or view always behaves like a DR unit.
SÓ TESTANDO pra saber o que acontece :-/
1. Crie um função que retorna o IP com SYS_CONTEXT('USERENV','IP_ADDRESS')
2. Crie uma trigger que executa essa função e salva na tabela o resultado.
Veja qual IP sai.
Depois, tenta mudar a função de AUTHID CURRENT_USER pra AUTHID CURRENT_USER DEFINER... Só pra ver se muda algo. DUVIDO que vai mudar :-/
-
- Rank: Analista Júnior
- Mensagens: 82
- Registrado em: Ter, 28 Dez 2010 7:41 pm
- Localização: São Paulo - SP
att. Fabio Ishii
http://ishii.profissionaloracle.com.br
http://ishii.profissionaloracle.com.br
Olá,
Sim, o userenv vai retornar o IP do cliente, se o cliente for uma app web ai vai retornar o IP do servidor da app e não do usuario mesmo...
Tenho uma tabela e uma trigger que pega todas as alterações de um determinado user:
Tabela... que pode ser criada em qualquer user...
Trigger que pode ser criada no mesmo user da tabela acima...
Mas o user tem que ter os seguintes grants no minimo
Funciona desde a versão 9i até a 11g...
[]s Ishii
Sim, o userenv vai retornar o IP do cliente, se o cliente for uma app web ai vai retornar o IP do servidor da app e não do usuario mesmo...
Tenho uma tabela e uma trigger que pega todas as alterações de um determinado user:
CREATE TABLE audit_objects
(
id_audit_objects NUMBER NOT NULL ,
dt_audit DATE ,
owner_audit VARCHAR2 (30) NOT NULL ,
user_audit VARCHAR2 (30) ,
os_user_audit VARCHAR2 (30) ,
machine_audit VARCHAR2 (64) ,
event_ora_audit VARCHAR2 (30) ,
ip_address_audit VARCHAR2 (20) ,
object_type_audit VARCHAR2 (20) ,
object_name_audit VARCHAR2 (128) ,
obs_audit VARCHAR2 (4000)
)
;
create or replace trigger traud_objects
before DDL on schema.<owner a ser auditado>
declare
--
vOsUser v$session.osuser%type;
vMachineUser v$session.machine%type;
vIdAuditObjects number;
vSqlTxt dbms_standard.ora_name_list_t;
vNum pls_integer;
vStmt varchar2(2000);
vObs varchar2(2000);
--
begin
select scvs_audit_objects.nextval
into vIdAuditObjects
from dual;
--
select machine , osuser
into vMachineUser, vOsUser
from v$session
where audsid = sys_context ('USERENV','SESSIONID');
--
if ora_sysevent = 'GRANT' then
--
-- Lista dos grantees
--
begin
--
vNum := ora_grantee (vSqlTxt);
vObs := 'Users: ';
--
for i in 1..vNum loop
--
vObs := vObs || '-' || vSqlTxt(i);
--
end loop;
--
end;
--
elsif ora_with_grant_option = TRUE then
--
vObs := vObs || ' with grant option';
--
end if;
--
insert into audit_objects
(id_audit_objects, dt_audit, owner_audit, user_audit, os_user_audit, machine_audit, event_ora_audit, ip_address_audit, object_type_audit, object_name_audit, obs_audit )
values
(vIdAuditObjects, sysdate, ora_dict_obj_owner, ora_login_user, vOsUser, vMachineUser, ora_sysevent, ora_client_ip_address, ora_dict_obj_type, ora_dict_obj_name, vObs );
--
end ;
/
Mas o user tem que ter os seguintes grants no minimo
grant administer database trigger to <user da trigger>;
grant create sequence to <user da trigger>;
grant select,references on v_$session to <user da trigger>;
grant select on dba_source to <user da trigger>;
grant select on dba_triggers to <user da trigger>;
grant select on dba_views to <user da trigger>;
[]s Ishii
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 24 visitantes