数据库安全和完整性约束

数据库安全和完整性约束

数据库安全

引言:数据库可能会被以下类型的因素破坏

  • 操作系统层面上的错误
  • 并发控制导致的数据非一致性
  • 人为因素,删库跑路啦
  • 输入的数据是不干净的,也会导致数据库被破坏,比如年龄数据输入总不能为负值吧

保护数据库安全的方法

  • 数据库不应该被非法访问,我们可以通过view和查询重写,比如只给相关的view,当检查到查询语句不对时,报错
  • 访问控制:对数据库的用户可以分为普通用户,拥有某些资源特权的用户,DBA。比如借书的人的账号和图书管理员账号的访问权限是不一样的
  • 通过用户身份识别验证,避免人为破坏数据库,就是加了个门槛,通过密码,指纹,钥匙的信息进行识别
  • 授权,部分权限授权给某些用户,如创建另一个账户并授权这个账号可以进行的操作
  • 数据加密,Data encryption,在底层上,如磁盘上对数据进行加密,别人即使访问到了也不知道数据是啥,但是这样的应用小,访问到底层加密的数据时,要进行解密加密操作,加密代价也要衡量,对敏感重要信息可以这么做。
  • 审计追踪,对数据对象进行监控,xx在xx时候对数据对象做了xx操作都被记录下来

统计数据库的安全问题

数据库系统提供了对数据库的统计查询,即COUNT,但是对部分数据,我们希望它不被别人知道,如学生成绩,员工薪水等,这时候有合法用户通过合法手段查询到特定某个人的薪水信息,我们这里讨论的就是对该部分数据安全进行讨论

个人追踪器和通用追踪器,这里可以百度下,我也没咋做笔记

完整性约束

约束,说白了就是一组规则,数据库中的每个实例都必须遵循这个约束,保证数据的完整性和一致性

约束类型

静态约束
  • 数据模型自带的约束,如关系数据库中的一范式,不允许表中表等
  • 隐式约束,隐含在数据模式中,通过DDL表现,比如域约束,主键约束,外键约束
  • 显式约束
动态约束

当一个数据库从一个状态转换到另一个状态的过程中,必须遵循大的约束规则,比如有两张表,主键表和外键表,对主键表删除时,要检查外键表中是否有依赖删除的元组的元组对象,如果有就进行报错或者联级删除,插入和更新同理

对完整性约束的定义

  • 在编程时进行设置
  • 通过断言进行约束设置
  • 在创建表的时候进行设置

通用约束,在某张表中进行constraint约束设置,当涉及多张表的时候,不适应,可以通过断言设置

触发器Triggers

触发器是用来解决动态约束的,是一种自动化的程序当特别的操作发生在DBMS中的时候
触发器有三个部分

  • Event,触发事件
  • Condition 决定触发器是否允许
  • Action 触发器运行时发生什么,可以是事件等

一个触发器应该满足ECA规则
例子:对一张表进行插入时,我们想把插入的数据中满足条件的一部分也插入到另一张表中,E触发事件就是对该表插入,C当插入的数据满足一定条件时可以决定运行该触发器,对另一张表也插入相应的数据就是A

ECA执行规则
  • ECA立即执行,这个常用
  • ECA延迟执行
  • 分离操作,比如可以把A当成事物,单独操作

连锁触发:当设置了过多的触发器,可能导致连锁触发的发生,所以触发器的使用要慎重

ECA实现方法
  • 松耦合,打补丁
  • 紧耦合,改内核
  • 嵌套,介于两者之间
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值