Oracle中的System Triggers(DDL触发器)
来源:互联网 发布:movie maker windows 7 编辑:程序博客网 时间:2024/05/15 01:55
这算是比较偏门的知识了,但是有很多实际意义,可以帮助DBA完成一些日常的管理工作,比如可以禁用一些用户的功能(禁止用户修改或者删除某一个表,限制IP登陆等)。
概述
Oracle数据库中的System Trigger可以建立在Schema(在某些DDL语句执行的时候触发)或者Database(主要在系统层面触发,比如说登陆或者发生某些系统级别的报错)。
SCHEMA trigger:
创建于某一个schema上面,并且经由某些DDL语句触发执行。具体看下文链接更多的DDL event。
Database trigger:
数据库触发器基于数据库之上,由某些数据库级别的事件触发。具体看下文链接更多的Database event。
触发模式
与DML触发器一样,有两种触发模式
before:在语句执行前触发
after:在语句执行后触发
这个就不用细说了。
简单示例
限制IP登陆
组织IP为192.168.100.71的机器发出的连接请求。
create or replace trigger limit_ip
AFTERLOGON on database
begin
ifSYS_CONTEXT('USERENV', 'ip_address') = '192.168.100.71' then
raise_application_error(-20999, 'Cann''t logon this database.');
end if;
end;
C:\Users\fengjun>sqlplusscott/tiger@192.168.100.221:1521/repo
SQL*Plus: Release 11.2.0.3.0 Production on 星期二 2月 25 09:49:182014
Copyright (c) 1982, 2011, Oracle. All rights reserved.
ERROR:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-20999: Cann't logon this database.
ORA-06512: 在 line 2
注:如果用户拥有DBA权限,则不受此触发器影响。
禁止用户删除对象
CREATE OR REPLACE TRIGGER dexter_drop_trigger
BEFOREDROP ON dexter.SCHEMA
BEGIN
RAISE_APPLICATION_ERROR(-20999, 'Cannot drop this object.');
END;
/
dexter@REPO>drop table ttt ;
drop table ttt
*
第 1 行出现错误:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-20999: Cannot drop this object.
ORA-06512: 在 line 2
根据IP判断是否可以删除对象
CREATE OR REPLACE TRIGGER DDL_TRIGGER_IOT
BEFORE ALTER OR DROP ON IOTPLATFORM.SCHEMA
BEGIN
IF SYS_CONTEXT( 'USERENV', 'ip_address' )= '192.168.0.39' AND
SYS_CONTEXT( 'USERENV', 'OS_USER' )= 'dex' AND
SYS_CONTEXT( 'USERENV', 'HOST' )= 'WORKGROUP\DEX-PC' THEN
NULL;
ELSE
RAISE_APPLICATION_ERROR(-20999, 'Connectto ur dba .' );
END IF;
END;
注意
如果没有使用Listener,而是使用本地IPC方式登陆数据库,限制IP的功能会有缺失,因为sys_context无法获得相关的IP信息。
拓展阅读
其实重点在这里
更多的DDL event
http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_trigger.htm#CIHGCJHC
更多的Database event
http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_trigger.htm#LNPLS2064
得到更多的用户连接信息
通过sys_context 获取更多连接信息。
http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions184.htm#sthref1594
- Oracle中的System Triggers(DDL触发器)
- Oracle DDL Triggers
- Oracle数据库触发器(Triggers)
- Oracle触发器3-DDL触发器
- Oracle DDL 触发器
- 触发器(Triggers)
- 触发器 triggers
- Oracle基础知识(六) - 触发器的分类:DDL触发器
- 利用Oracle DDL触发器实现DDL监控
- Get Information About DDL Triggers(sqlserver 获取数据库、服务器级触发器)
- 一个ORACLE的DDL触发器例子(阻止DDL并记警告日志)
- WPF 触发器Triggers
- WPF 触发器Triggers
- Oracle中的DDL语句
- 一个ORACLE的DDL触发器例子
- Oracle使用触发器禁止远程DDL操作
- oracle数据库登录、DDL触发器的应用
- oracle 系统的ddl触发器研究
- ParMETIS 安装与使用
- Application context和Activity context的区别
- 一步一步学ios UILabel(label控件)的详细使用及特殊效果(五5.6)
- Java中的线程Thread方法之---stop()
- iOS - 利用UILayer实现扁平化控件、带弧度的UIButton、圆形的UIImageView:
- Oracle中的System Triggers(DDL触发器)
- 搭建Android开发环境
- Eclipse中如何进行运行参数的设置
- 如何用“友好”的方式告诉经理:拥有一个好程序员是你的幸运?
- 微信研究:爸妈攻陷朋友圈,用户逃离微信?
- Qt之打包发布(NSIS详解)
- lhgdialog
- Oracle练习:有关Oracle用户scott的sql练习
- performance data修改相关代码记录