Oracle中的DDL触发器

在日常应用中最常见的是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。

创建这种触发器需要管理员权限。触发器的具体操作就是返回一个错误信息。

此时,如果我们尝试执行修改或者删除表的SQL命令,将会返回一个错误信息:

在必要时(比如系统部署升级时),我们可以使用ALTER TRIGGER命令禁用触发器disable_ddl,完成DDL命令之后可以再次启用该触发器。

禁用触发器

alter trigger DISABLE_DDL disable;

启用触发器

alter trigger DISABLE_DDL enable;

猜你喜欢

转载自blog.csdn.net/liangmengbk/article/details/124341555