如何使用触发器实现级守护,防止DDL操作
来源:互联网 发布:400电话软件 编辑:程序博客网 时间:2024/05/16 10:24
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
如何使用触发器实现数据库级守护,防止DDL操作
--对于重要对象,实施DDL拒绝,防止create,drop,truncate,alter等重要操作
LastUpdated:Sunday,2004-10-3112:06Eygle
不管是有意还是无意的,你可能会遇到数据库中重要的数据表等对象被drop掉的情况,这可能会给我们带来巨大的损失.
通过触发器,我们可以实现对于表等对象的数据库级守护,禁止用户drop操作.
以下是一个简单的范例,供参考:
REMthisscriptcanbeusedtomonitoraobjectREMdenyanydropoperationonit.CREATEORREPLACETRIGGERtrg_dropdenyBEFOREDROPONDATABASEBEGINIFLOWER(ora_dict_obj_name())='test'THENraise_application_error(num=>-20000,msg=>'你疯了,想删除表'||ora_dict_obj_name()||'?!!!!!'||'你完了,警察已在途中.....');ENDIF;END;/
测试效果:
SQL>connectscott/tigerConnected.SQL>createtabletestasselect*fromdba_users;Tablecreated.SQL>connect/assysdbaConnected.SQL>createorreplacetriggertrg_dropdeny2beforedropondatabase3begin4iflower(ora_dict_obj_name())='test'5then6raise_application_error(7num=>-20000,8msg=>'你疯了,想删除表'||ora_dict_obj_name()||'?!!!!!'||'你完了,警察已在途中.....');9endif;10end;11/Triggercreated.SQL>connectscott/tigerConnected.SQL>droptabletest;droptabletest*ERRORatline1:ORA-00604:erroroccurredatrecursiveSQLlevel1ORA-20000:你疯了,想删除表TEST?!!!!!你完了,警察已在途中.....ORA-06512:atline4
从Oracle8i开始,允许实施DDL事件trigger,可是实现对于DDL的监视及控制,以下是一个进一步的例子:
createorreplacetriggerDDL_denybeforecreateoralterordroportruncateondatabasedeclarel_errmsgvarchar2(100):='Youhavenopermissiontothisoperation';beginifora_sysevent='CREATE'thenraise_application_error(-20001,ora_dict_obj_owner||'.'||ora_dict_obj_name||''||l_errmsg);elsifora_sysevent='ALTER'thenraise_application_error(-20001,ora_dict_obj_owner||'.'||ora_dict_obj_name||''||l_errmsg);elsifora_sysevent='DROP'thenraise_application_error(-20001,ora_dict_obj_owner||'.'||ora_dict_obj_name||''||l_errmsg);elsifora_sysevent='TRUNCATE'thenraise_application_error(-20001,ora_dict_obj_owner||'.'||ora_dict_obj_name||''||l_errmsg);endif;exceptionwhenno_data_foundthennull;end;/
我们看一下效果:
[oracle@jumpertools]$sqlplus"/assysdba"
SQL*Plus:Release9.2.0.4.0-ProductiononSunOct3111:38:252004
Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.
Connectedto:
Oracle9iEnterpriseEditionRelease9.2.0.4.0-Production
WiththePartitioningoption
JServerRelease9.2.0.4.0-Production
SQL>setechoon
SQL>@DDLt
SQL>createorreplacetriggerDDL_deny
2beforecreateoralterordroportruncateondatabase
3declare
4l_errmsgvarchar2(100):='Youhavenopermissiontothisoperation';
5begin
6ifora_sysevent='CREATE'then
7raise_application_error(-20001,ora_dict_obj_owner||'.'||ora_dict_obj_name||''||l_errmsg);
8elsifora_sysevent='ALTER'then共2页 1
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
如何使用触发器实现数据库级守护,防止DDL操作
--对于重要对象,实施DDL拒绝,防止create,drop,truncate,alter等重要操作
LastUpdated:Sunday,2004-10-3112:06Eygle
不管是有意还是无意的,你可能会遇到数据库中重要的数据表等对象被drop掉的情况,这可能会给我们带来巨大的损失.
通过触发器,我们可以实现对于表等对象的数据库级守护,禁止用户drop操作.
以下是一个简单的范例,供参考:
REMthisscriptcanbeusedtomonitoraobjectREMdenyanydropoperationonit.CREATEORREPLACETRIGGERtrg_dropdenyBEFOREDROPONDATABASEBEGINIFLOWER(ora_dict_obj_name())='test'THENraise_application_error(num=>-20000,msg=>'你疯了,想删除表'||ora_dict_obj_name()||'?!!!!!'||'你完了,警察已在途中.....');ENDIF;END;/
测试效果:
SQL>connectscott/tigerConnected.SQL>createtabletestasselect*fromdba_users;Tablecreated.SQL>connect/assysdbaConnected.SQL>createorreplacetriggertrg_dropdeny2beforedropondatabase3begin4iflower(ora_dict_obj_name())='test'5then6raise_application_error(7num=>-20000,8msg=>'你疯了,想删除表'||ora_dict_obj_name()||'?!!!!!'||'你完了,警察已在途中.....');9endif;10end;11/Triggercreated.SQL>connectscott/tigerConnected.SQL>droptabletest;droptabletest*ERRORatline1:ORA-00604:erroroccurredatrecursiveSQLlevel1ORA-20000:你疯了,想删除表TEST?!!!!!你完了,警察已在途中.....ORA-06512:atline4
从Oracle8i开始,允许实施DDL事件trigger,可是实现对于DDL的监视及控制,以下是一个进一步的例子:
createorreplacetriggerDDL_denybeforecreateoralterordroportruncateondatabasedeclarel_errmsgvarchar2(100):='Youhavenopermissiontothisoperation';beginifora_sysevent='CREATE'thenraise_application_error(-20001,ora_dict_obj_owner||'.'||ora_dict_obj_name||''||l_errmsg);elsifora_sysevent='ALTER'thenraise_application_error(-20001,ora_dict_obj_owner||'.'||ora_dict_obj_name||''||l_errmsg);elsifora_sysevent='DROP'thenraise_application_error(-20001,ora_dict_obj_owner||'.'||ora_dict_obj_name||''||l_errmsg);elsifora_sysevent='TRUNCATE'thenraise_application_error(-20001,ora_dict_obj_owner||'.'||ora_dict_obj_name||''||l_errmsg);endif;exceptionwhenno_data_foundthennull;end;/
我们看一下效果:
[oracle@jumpertools]$sqlplus"/assysdba"
SQL*Plus:Release9.2.0.4.0-ProductiononSunOct3111:38:252004
Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.
Connectedto:
Oracle9iEnterpriseEditionRelease9.2.0.4.0-Production
WiththePartitioningoption
JServerRelease9.2.0.4.0-Production
SQL>setechoon
SQL>@DDLt
SQL>createorreplacetriggerDDL_deny
2beforecreateoralterordroportruncateondatabase
3declare
4l_errmsgvarchar2(100):='Youhavenopermissiontothisoperation';
5begin
6ifora_sysevent='CREATE'then
7raise_application_error(-20001,ora_dict_obj_owner||'.'||ora_dict_obj_name||''||l_errmsg);
8elsifora_sysevent='ALTER'then共2页 1
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 如何使用触发器实现数据库级守护,防止DDL操作
- 如何使用触发器实现级守护,防止DDL操作
- 使用触发器实现数据库级守护,防止DDL操作
- 使用触发器实现数据库级守护,防止DDL操作
- 使用触发器实现数据库级守护
- Oracle使用触发器禁止远程DDL操作
- 记录数据库ddl操作触发器
- 利用Oracle DDL触发器实现DDL监控
- 如何监控ddl操作
- 因OGG ddl触发器 导致所有user不能ddl操作
- OGG ddl触发器 导致所有user不能ddl操作
- DDL触发器
- DDL触发器
- DDl触发器
- DDL触发器
- 如何实现守护进程?
- Oracle触发器3-DDL触发器
- 使用触发器和自治事务做了个DDL审计
- 报个到
- 创业:理性地选择一个适合自己的项目
- 应用存储过程按月建数据表
- 数据仓库常见名词浅释
- 数据仓库常见名词浅释
- 如何使用触发器实现级守护,防止DDL操作
- Welcome to Open Source & Drupal Camp Shanghai 2008!
- 根据汉字声母,在表中找相关记录。比如输入"zgyh",就能找到所有“中国银行”的记录。
- ADODataTypes与值对应
- 中国ERP之路
- 使用Microsoft2000的全文搜索功能构建Web搜索应用程序
- 如何在SQL中启用全文检索功能?(实例)
- 防止IIS返回错误信息泄露服务器敏感信息
- 这是个没头没尾的文章