【赵强老师】利用数据库触发实现复杂的安全性检查
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,一、什么是触发器数据库触发器是一个与表相关联的,存储的PL/SQL 语句。每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语
千家信息网最后更新 2025年01月23日【赵强老师】利用数据库触发实现复杂的安全性检查
一、什么是触发器
数据库触发器是一个与表相关联的,存储的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安全错误
数据库的锁怎样保障安全
租个游戏服务器多少钱
服务器安全策略目的
筛选后无筛选数据库
如皋网络安全大队
web服务器分类
当前网络安全工作存在的主要问题
联想p320服务器机箱内
数据库中间库在哪里
nr 库是什么数据库
hp服务器硬盘要同型号的吗
哈密软件开发大概费用
天象网络技术公司免费培训
话费购服务器维护要多久
cf连接服务器失败怎么搞
软件开发1年没上班了
杭州net软件开发报价
互联网领先科技学校
重庆服务器报废哪家服务好
东莞app软件开发公司排名
学习保密法密码法网络安全法
景区数字孪生软件开发
干部信息数据库材料
新吴区进口网络技术创造辉煌
傲龙软件开发
不属于网络安全管理的
超微服务器开机卡logo
企业级云原生数据库
生成数据库脚本还原失败
零基础学习软件开发要多久
打开数据库时