【赵强老师】利用数据库触发实现复杂的安全性检查
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,一、什么是触发器数据库触发器是一个与表相关联的,存储的PL/SQL 语句。每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语
千家信息网最后更新 2025年11月09日【赵强老师】利用数据库触发实现复杂的安全性检查
一、什么是触发器
数据库触发器是一个与表相关联的,存储的PL/SQL 语句。每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。
触发器的应用场景如下:
- 复杂的安全性检查
- 数据的确认
- 数据库审计
- 数据的备份和审计
二、创建Oracle触发器的语法
CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER } {INSERT | DELETE | UPDATE [OF column [, column …]]} [OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...] ON [schema.]table_name | [schema.]view_name [REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}] [FOR EACH ROW ] [WHEN condition] PL/SQL_BLOCK | CALL procedure_name;其中:
- BEFORE 和AFTER指出触发器的触发时序分别为前触发和后触发方式,前触发是在执行触发事件之前触发当前所创建的触发器,后触发是在执行触发事件之后触发当前所创建的触发器。
- FOR EACH ROW选项说明触发器为行触发器。
- 行触发器和语句触发器的区别表现在:行触发器要求当一个DML语句操走影响数据库中的多行数据时,对于其中的每个数据行,只要它们符合触发约束条件,均激活一次触发器;而语句触发器将整个语句操作作为触发事件,当它符合约束条件时,激活一次触发器。
- 当省略FOR EACH ROW 选项时,BEFORE 和AFTER 触发器为语句触发器,而INSTEAD OF 触发器则只能为行触发器
- REFERENCING 子句说明相关名称,在行触发器的PL/SQL块和WHEN 子句中可以使用相关名称参照当前的新、旧列值,默认的相关名称分别为OLD和NEW。触发器的PL/SQL块中应用相关名称时,必须在它们之前加冒号(:),但在WHEN子句中则不能加冒号。
- WHEN 子句说明触发约束条件。Condition 为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL 函数。WHEN 子句指定的触发约束条件只能用在BEFORE 和AFTER 行触发器中,不能用在INSTEAD OF 行触发器和其它类型的触发器中。
- 当一个基表被修改( INSERT, UPDATE, DELETE)时要执行的存储过程,执行时根据其所依附的基表改动而自动触发,因此与应用程序无关,用数据库触发器可以保证数据的一致性和完整性。
三、Oracle触发器的类型
- 行级触发器:对DML语句影响的每个行执行一次,例如,一条update语句更新了100条数据,如果我们针对update定义了行级触发器,那么行级触发器将会被触发100次 。
- 语句级触发器:对每个DML语句执行一次,例如,一条update语句更新了200条数据,如果我们针对update定义了语句级触发器,那么语句级触发器将会被触发1次 。
四、利用数据库触发实现复杂的安全性检查
/*实施复杂的安全性检查禁止在非工作时间插入新员工周末:to_char(sysdate,'day') in ('星期六','星期日')上班前和下班后:to_number(to_char(sysdate,'hh34')) not between 9 and 18 */create or replace trigger securityempbefore inserton empbegin if to_char(sysdate,'day') in ('星期六','星期日') or to_number(to_char(sysdate,'hh34')) not between 9 and 18 then --禁止insert操作 抛出异常 raise_application_error(-20001,'禁止在非工作时间插入新员工'); end if;end;/- 在上面的例子中,我们禁止在非工作时间插入新员工,从而实现执行insert语句时候的安全性检查。
触发器
语句
数据
数据库
名称
子句
安全
安全性
检查
星期
条件
复杂
事件
员工
时间
应用
冒号
是在
激活
类型
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机网络安全教师教学随笔
肇庆微商软件开发定制
作战指挥员席位软件开发
为什么boss显示服务器繁忙
方舟服务器指令
戴尔服务器磁盘阵列不引导
计算机三级网络技术难考吗
戴尔服务器关机了开不了
灞桥区网络安全宣传视频
一链通互联网海运科技
做app需要服务器
软件开发编程人员岗位职责
好口碑的软件开发制作
不带数据库程序
再谈网络安全意味着什么
安全月网络安全
医疗共同体网络安全
软件开发魔豆芽
群晖服务器一年多少钱
安卓数据库框架怎么查询id
软件开发项目管理培训机构
湖北串口服务器工厂
可以下载图书全文的数据库
欧洲网络安全指导
横山网络安全宣传周
莒县网络安全网
物业管理软件开发框架
成都智能边缘计算服务器什么价格
网络安全防护知识和技能
苏州国家网络安全宣传周