验证ORA_CLIENT_IP_ADDRESS只在系统触发器中有效

ORA_CLIENT_IP_ADDRESS函数的功能是以VARCHAR2类型返回客户端IP地址,一般只用在系统触发器中,其实它也只在系统触发器中有效.经常

ora_client_ip_address函数的功能是以varchar2类型返回客户端ip地址,一般只用在系统触发器中,其实它也只在系统触发器中有效.
 
经常看到有人说使用ora_client_ip_address获得的ip为空,大概也是这个原因造成的.
 
这里采用ddl触发器和系统触发器做对比.
 
首先准备实验用的表及两个触发器对象(一个ddl触发器,一个系统触发器)

–建立记录表
23:37:15 SYS@orcl> create table t01(id number,nn varchar2(40));
Elapsed: 00:00:00.05
–建立系统触发器
23:37:53 SYS@orcl> create or replace trigger ORA_TEST
23:38:16  2    after logon ON database
23:38:16  3  BEGIN
23:38:16  4    dbms_output.put_line(ORA_LOGIN_USER||’IP:’||NVL(ORA_CLIENT_IP_ADDRESS,’AA’));
23:38:16  5    insert into t01 select nvl(max(id),0)+1,ORA_LOGIN_USER||'[system Trigger]IP:’||NVL(ORA_CLIENT_IP_ADDRESS,’AA’) from t01;
23:38:16  6  end;
23:38:17  7  /
Elapsed: 00:00:00.05
–建立DDL触发器
23:38:19 SYS@orcl> create or replace trigger ORA_TEST_ddl
23:38:38  2    after ddl ON database
23:38:38  3  BEGIN
23:38:38  4    dbms_output.put_line(ORA_LOGIN_USER||’IP:’||NVL(ORA_CLIENT_IP_ADDRESS,’AA’));
23:38:38  5    insert into t01 select nvl(max(id),0)+1,ORA_LOGIN_USER||'[DDL Trigger]IP:’||NVL(ORA_CLIENT_IP_ADDRESS,’AA’) from t01;
23:38:38  6  end;
23:38:38  7  /
Elapsed: 00:00:00.11

其中特别加了ORA_LOGIN_USER来标识登录的用户,以及DDL Trigger和system Trigger字串来标识触发的是哪个触发器.

–先测试系统触发器,发现dbms_output.put_line没有输出
00:06:11 @orcl> conn cry/cry
Connected.
00:09:28 CRY@orcl> conn scott/tiger
Connected.
00:09:37 SCOTT@orcl> conn sys/ as sysdba
Connected.

此时的表t01为

00:09:40 SYS@orcl> select * from t01;

        ID NN
———- —————————————-
        1 CRY[system Trigger]IP:192.168.123.102
        2 SCOTT[system Trigger]IP:192.168.123.102
        3 SYS[system Trigger]IP:192.168.123.102
Elapsed: 00:00:00.02

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1889512.html

(0)
上一篇 2025年2月22日 12:56:39
下一篇 2025年2月22日 12:56:54

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Oracle触发器中select into 报错no_data_found异常处理

    Oracle触发器中select into 报错no_data_found异常处理 红色部分为对查询不到数据异常的处理 create or replace trigger TIG_MONITOR_ALARM   after insert o…

    数据库 2025年2月22日
    200
  • Oracle数据库中有关触发器问题

    Oracle触发器是一种特殊类型的存储过程,它不同于存储过程。触发器主要是通过事件进行触发而被执行的,触发器的触发事件分可为3类 oracle触发器是一种特殊类型的存储过程,它不同于存储过程。触发器主要是通过事件进行触发而被执行的,触发器的…

    数据库 2025年2月22日
    200
  • Oracle触发器查询统计本表

    Oracle触发器查询统计本表,这次由于项目需要,实际动手演练了一把,达到了需要的效果,大致是插入数据后,统计表内和当前插入数 oracle触发器查询统计本表 这次由于项目需要,实际动手演练了一把,达到了需要的效果,大致是插入数据后,,统计…

    数据库 2025年2月22日
    200
  • Oracle利用触发器和sequence实现主键自增长

    Oracle利用触发器和sequence实现主键自增长 建立表 — Create tablecreate table GEO_BOOKMARK( F_ID NUMBER not null, F_NAME V oracle利用触发…

    数据库 2025年2月22日
    200
  • Oracle触发器的使用

    与表或数据库事件联系在一起,当一个触发器事件发生时,定义在表上的触发器被触发执行。系统事件触发器可以在DDL或数据库系统上被 1、定义 触发器:与表或数据库事件联系在一起,当一个触发器事件发生时,定义在表上的触发器被触发执行。 触发器触发次…

    数据库 2025年2月22日
    200
  • Oracle触发器(trigger):view,schema,database

    Oracle触发器(trigger):view,schema,database 视图trigger, instead of 我们知道如果一个view只是由一个table构成,那在view上做啥操作没太多限制.如果view是由多个table组…

    数据库 2025年2月22日
    200
  • Oracle触发器(trigger):一般用法

    trigger和procedure,function类似,只不过它不能被显示调用,只能被某个事件触发然后oracle自动去调用.常用的一般是针对一个表或视 trigger和procedure,function类似,只不过它不能被显示调用,只…

    数据库 2025年2月22日
    200
  • Oracle触发器给表自身的字段重新赋值出现ORA-04091异常

    Oracle下插入一个表的时候,需要根据一个字段的值更新另一个字段的值。当然也可以通过程序就能很简单得实现,只是这个字段只是数 业务描述如下: Oracle下插入一个表的时候,需要根据一个字段的值更新另一个字段的值。当然也可以通过程序就能很…

    数据库 2025年2月22日
    200
  • Oracle触发器中增删改查本表

    Oracle触发器中增删改查本表 (1)只有before insert触发器中才可以查询或更新本表 create or replace trigger tri_test_ins befor oracle触发器中增删改查本表 (1)只有bef…

    数据库 2025年2月22日
    200
  • 使用触发器记录Oracle用户登陆信息

    Oracle 提供了强大的审计功能,可以针对用户级,系统级范围,以及标准审计,细粒度审计等多种方式来审计各种数据库层面上的操作。 oracle 提供了强大的审计功能,可以针对用户级,系统级范围,以及标准审计,细粒度审计等多种方式来审计各种数…

    数据库 2025年2月22日
    300

发表回复

登录后才能评论