仓酷云
标题:
MYSQL网页设计怎样利用触发器完成数据库级保卫,避免D...
[打印本页]
作者:
蒙在股里
时间:
2015-1-16 22:51
标题:
MYSQL网页设计怎样利用触发器完成数据库级保卫,避免D...
用户时常会发现其实自己并不是第一个选用MySQL数据库的先驱者。”触发器|数据|数据库
怎样利用触发器完成数据库级保卫,避免DDL操纵
--关于主要工具,实行DDL回绝,避免create,drop,truncate,alter等主要操纵
LastUpdated:Sunday,2004-10-3112:06Eygle
不论是成心仍是偶然的,你大概会碰到数据库中主要的数据表等工具被drop失落的情形,这大概会给我们带来伟大的丧失.
经由过程触发器,我们能够完成关于表等工具的数据库级保卫,克制用户drop操纵.
以下是一个复杂的典范,供参考:
REMthisscriptcanbeusedtomonitoraobjectREMdenyanydropoperationonit.CREATEORREPLACETRIGGERtrg_dropdenyBEFOREDROPONDATABASEBEGINIFLOWER(ora_dict_obj_name())=testTHENraise_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())=test5then6raise_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
Oracle从Oracle8i入手下手,同意实行DDL事务trigger,但是完成关于DDL的监督及把持,以下是一个进一步的例子:
createorreplacetriggerddl_denybeforecreateoralterordroportruncateondatabasedeclarel_errmsgvarchar2(100):=Youhavenopermissiontothisoperation;beginifora_sysevent=CREATEthenraise_application_error(-20001,ora_dict_obj_owner||.||ora_dict_obj_name||||l_errmsg);elsifora_sysevent=ALTERthenraise_application_error(-20001,ora_dict_obj_owner||.||ora_dict_obj_name||||l_errmsg);elsifora_sysevent=DROPthenraise_application_error(-20001,ora_dict_obj_owner||.||ora_dict_obj_name||||l_errmsg);elsifora_sysevent=TRUNCATEthenraise_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=CREATEthen
7raise_application_error(-20001,ora_dict_obj_owner||.||ora_dict_obj_name||||l_errmsg);
8elsifora_sysevent=ALTERthen
9raise_application_error(-20001,ora_dict_obj_owner||.||ora_dict_obj_name||||l_errmsg);
10elsifora_sysevent=DROPthen
11raise_application_error(-20001,ora_dict_obj_owner||.||ora_dict_obj_name||||l_errmsg);
12elsifora_sysevent=TRUNCATEthen
13raise_application_error(-20001,ora_dict_obj_owner||.||ora_dict_obj_name||||l_errmsg);
14endif;
15
16exception
17whenno_data_foundthen
18null;
19end;
20/
Triggercreated.
SQL>
SQL>
SQL>connectscott/tiger
Connected.
SQL>createtabletasselect*fromtest;
createtabletasselect*fromtest
*
ERRORatline1:
ORA-00604:erroroccurredatrecursiveSQLlevel1
ORA-20001:SCOTT.TYouhavenopermissiontothisoperation
ORA-06512:atline5
SQL>altertabletestadd(idnumber);
altertabletestadd(idnumber)
*
ERRORatline1:
ORA-00604:erroroccurredatrecursiveSQLlevel1
ORA-20001:SCOTT.TESTYouhavenopermissiontothisoperation
ORA-06512:atline7
SQL>droptabletest;
droptabletest
*
ERRORatline1:
ORA-00604:erroroccurredatrecursiveSQLlevel1
ORA-20001:SCOTT.TESTYouhavenopermissiontothisoperation
ORA-06512:atline9
SQL>truncatetabletest;
truncatetabletest
*
ERRORatline1:
ORA-00604:erroroccurredatrecursiveSQLlevel1
ORA-20001:SCOTT.TESTYouhavenopermissiontothisoperation
ORA-06512:atline11
我们能够看到,ddl语句都被克制了,假如你不是克制,能够选择把实行这些操纵的用户实时间纪录到别的的一时表中.以备查询.
本文作者:
eygle,Oracle手艺存眷者,来自中国最年夜的Oracle手艺论坛itpub.
www.eygle.com是作者的团体站点.你可经由过程Guoqiang.Gai@gmail.com来接洽作者.接待手艺切磋交换和链接互换.
原文出处:
http://www.eygle.com/faq/Use.Trigger.To.implement.ddl.deny.htm
如欲转载,请说明作者与出处.并请保存本文的毗连.
回想页
首先我们要知道,或许有一项技术存在很多理由让我们可以选择使用MySQL学习教程,但是让我们不使用它往往只要有一个理由就足够了。
作者:
谁可相欹
时间:
2015-1-17 16:37
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
作者:
变相怪杰
时间:
2015-1-20 20:45
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
作者:
活着的死人
时间:
2015-1-29 22:46
连做梦都在想页面结构是怎么样的,绝非虚言
作者:
若天明
时间:
2015-2-6 05:53
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
作者:
灵魂腐蚀
时间:
2015-2-15 14:12
是要和操作系统进行Socket通讯的场景。否则建议慎重!
作者:
仓酷云
时间:
2015-3-4 11:35
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
作者:
老尸
时间:
2015-3-11 19:18
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
作者:
海妖
时间:
2015-3-19 09:25
大家注意一点。如下面的例子:
作者:
若相依
时间:
2015-3-27 17:10
大侠们有推荐的书籍和学习方法写下吧。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2