在日常应用中最常见的是DML触发器,关于DML触发器可以参考文章Oracle中的DML触发器
DDL触发器由数据定义语句(比如CREATE、DROP语句等)触发。
DDL触发器的应用场景
为了防止因恶意攻击或者用户误操作而导致删除数据表,我们可以在系统日常运行时禁止执行某些数据库命令,比如DROP TABLE语句。
DDL触发器可以用于监控和防止针对数据库对象的修改命令。
DDL触发器的应用示例
禁止进行数据库表的修改和删除操作
CREATE OR REPLACE TRIGGER DISABLE_DDL
BEFORE ALTER OR DROP ON DATABASE --在修改和删除数据库表之前触发
BEGIN
raise_application_error(-20001,'禁止修改数据库对象');
END;
disable_ddl是一个DDL触发器,BEFORE ALTER OR DROP表示在修改或者删除数据库对象之前触发,ON DATABASE表示任何数据库用户执行的操作都会触发disable_ddl。
扫描二维码关注公众号,回复:
14328190 查看本文章
创建这种触发器需要管理员权限。触发器的具体操作就是返回一个错误信息。
此时,如果我们尝试执行修改或者删除表的SQL命令,将会返回一个错误信息:
在必要时(比如系统部署升级时),我们可以使用ALTER TRIGGER命令禁用触发器disable_ddl,完成DDL命令之后可以再次启用该触发器。
禁用触发器
alter trigger DISABLE_DDL disable;
启用触发器
alter trigger DISABLE_DDL enable;