数据库的安全很复杂往往需要考虑多种安全策略_数据库设置触发器

数据库的安全很复杂往往需要考虑多种安全策略_数据库设置触发器{BEFORE| AFTER }{INSERT | DELETE | UPDATE [OF column [, column …]]}[OR {

数据库的安全很复杂往往需要考虑多种安全策略_数据库设置触发器

一、什么是触发器

数据库触发器是一个与表相关联的,存储的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,'hh24')) not between 9 and 18 
*/
create or replace trigger securityemp
before insert
on emp
begin
  if to_char(sysdate,'day') in ('星期六','星期日') or
     to_number(to_char(sysdate,'hh24')) not between 9 and 18 then
     --禁止insert操作 抛出异常
     raise_application_error(-20001,'禁止在非工作时间插入新员工');
  end if;
end;
/
  • 在上面的例子中,我们禁止在非工作时间插入新员工,从而实现执行insert语句时候的安全性检查。
数据库的安全很复杂往往需要考虑多种安全策略_数据库设置触发器

数据库的安全很复杂往往需要考虑多种安全策略_数据库设置触发器

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11634.html

(0)

相关推荐

  • Python嵌套列表的使用

    Python嵌套列表的使用在Python中,列表是一种非常常用的数据类型。嵌套列表是指在一个列表中又嵌套了一个或多个列表。嵌套列表的使用非常灵活,能够方便地表示复杂的结构化数据。

    2024-02-10
    49
  • 五个Taurus垃圾回收compactor优化方案,减少系统资源占用「终于解决」

    五个Taurus垃圾回收compactor优化方案,减少系统资源占用「终于解决」简介 TaurusDB是一种基于MySQL的计算与存储分离架构的云原生数据库,一个集群中包含多个存储几点,每个存储节点包含多块磁盘,每块磁盘对应一个或者多个slicestore的内存逻辑结构来管理….

    2023-03-12
    105
  • 意派Epub360丨学党史、知奋进,红色地标推荐线路交互H5怎么做?

    意派Epub360丨学党史、知奋进,红色地标推荐线路交互H5怎么做?天气渐渐转暖,很多人都开始制定出游计划了。在众多旅游推荐线路中,以红色地标为主题的精品线路既独特又吸睛。 这类红色地标精品线路旨在便于人民群众更好地传承红色精神。游客们既可以参观打卡红色地标,又能结…

    2023-04-13
    109
  • 记录不存在则插入,存在则更新 → MySQL 的实现方式有哪些?[亲测有效]

    记录不存在则插入,存在则更新 → MySQL 的实现方式有哪些?[亲测有效]开心一刻 今天我爸、我、我女儿一起吃饭,我们每人一个鸡腿 女儿问道:爸爸,你吃鸡腿吗 我以为她要把她的鸡腿给我吃,倍感欣慰地说道:我不吃,宝贝 女儿一把抓起我的鸡腿放进了她爷爷的碗里,说道:不吃给爷爷

    2023-04-22
    107
  • 在Python中声明数组

    在Python中声明数组在编程中,数组是一种非常常见的数据结构。数组可以存储多个相同类型的数据,并可以通过下标索引来访问数组中的元素。在Python中,声明数组并不像C语言一样需要事先指定数组的大小,这是因为Python中的数组是一种动态的数据类型,可以自动调整大小以适应存储的元素。

    2024-05-10
    18
  • view的基础知识介绍怎么写_汽车基础知识简单介绍

    view的基础知识介绍怎么写_汽车基础知识简单介绍通过上面的官方介绍,我们可以看到,View 是我们平常看到的视图上所有元素的父类,按钮Button、文本TextView、图片ImageView 等。 ViewGroup 也是 View 的子类,ViewGroup 相当与 View 的容器,可以包含很多的 View. 左上角为…

    2023-08-06
    78
  • CENTOS7.6在台式机安装网卡驱动

    CENTOS7.6在台式机安装网卡驱动文章浏览阅读4.9k次,点赞3次,收藏13次。CENTOS7.6安装网卡驱动提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、获取驱动1.装载centos系统2.查询网卡驱动二、使用步骤1.引入库2.读入数据总

    2023-11-06
    86
  • Linux上生产环境源码方式安装配置postgresql12

    Linux上生产环境源码方式安装配置postgresql121、Linux上源码方式安装postgresql12 01、准备操作系统环境 echo "192.168.1.61 tsepg61" >> /etc/hosts mou

    2023-04-19
    112

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注