数据库(三)

数据库安全性

1.数据库的不安全因素

  • 非授权用户对数据库的恶意存取和破坏
  • 数据库中重要的数据被泄露
  • 安全环境的脆弱性

2.授权:授予与收回

2.1.GRANT

grant <权限>,···
on <对象类型><对象名>,···
to <用户>···
[with check option]   //表示 被授权的用户可以在授予其他用户这些权限(继续传递)

/* 把查询student表的权限授予U1 */
grant select             //还可以是  ALL PRIVILEGES 全部权限,UPDATE(Sno) 更新某列
on Table student
to U1

  • 将对指定操作对象的指定操作权限授予指定的用户

2.2.REVOKE

revoke <权限>,···
on <对象类型><对象名>,···
from <用户>···[cascade|restrict]   //默认:cascade 收回衍生权限

数据库完整性

  • 数据的正确性和相容性

1.实体完整性

  • 列级约束条件
  • 表级约束条件
  • 单属性构成时,都可
  • 多属性构成时,只能表级约束
create table stu
(
    sno CHAR(9) PRIMARY KEY          //列级约束定义
    sname CHAR(20)
)

create table stu
(
    sno CHAR(9)
    sname CHAR(20)
    PRIMARY KEY(sno)                //表级约束条件
)

create table stu
(
    sno CHAR(9)
    sname CHAR(20)
    PRIMARY KEY(sno,sname)          //多值时表级约束,,!!表明 主码是(sno,sname),不是两个分开
)

1.1.实体完整性检查和违约处理

  • 检查主码值是否唯一,不唯一则拒绝
  • 检查主码的各个属性是否为空,有空就拒绝

2.参照完整性

2.1.定义参照完整性

  • 针对于外键所描述
//主码(sno,cno),sno为stu主码,cno为course主码
create table sc
(
    sno int not null,
    cno int not null,
    grade int,
    PRIMARY KEY(sno,cno),
    FOREIGN KEY(sno) references stu(sno),
    FOREIGN KEY(cno) references coruse(cno),
)

3.用户定义的完整性

3.1.属性列上的约束条件

  • 列值非空 not null
  • 列值唯一 unique
  • 列值是否满足一个条件表达式 check
create table stu
(   sno int not null,unique                   //not null.unique
    ssex char(2) check(ssex in ('男','女'))    //check
    grade int check(grade > 0)                //check
)

4.触发器

  • 事件-条件-动作 规则
create trigger <触发器名>                   //触发事件发生时,触发器激活
{before|after} <触发事件> on <表名>         //指明触发器激活的时间,是在触发事件前 或 后
REFERENCING NEW | OLD ROW AS<变量>         //REFERENCING指出引用的变量
FOR EACH{ROW|STATEMENT}                   //定义触发器类型,知名动作体制性的频率
[when<触发条件>]<触发动作>                  //仅当触发条件为真时,触发动作体

关系数据理论

1.问题的提出

  • 1NF:每一个分量是不可分的数据项
  • 数据依赖:关系内部属性与属性之间的一种约束关系。最重要的是 函数依赖FD 多值依赖MVD
  • 关系模型常常会有四种问题
    • 数据冗余
    • 更新异常
    • 插入异常
    • 删除异常
  • 一个好的模式应当不会发生插入异常、删除异常、更新异常。数据冗余尽可能小

2.规范化

2.1.函数依赖

  • 平凡函数依赖:X->Y,Y属于X(不讨论)
  • 非平凡函数依赖:X->Y,Y不属于X(以下均均为非平凡函数依赖)
  • 决定因素:自变量,X
  • 完全函数依赖:在某一关系模式下,X->Y,对于X的任一真子集,都无法推导出Y
  • 部分函数依赖:在某一关系模式下,X->Y,存在至少一个X的真子集,可以推导出Y
  • 传递函数依赖:在某一关系模式下,X->Y,Y推不出X,Y->Z,则X->Z

2.2.码

  • 候选码:某一关系模式下,某个属性或属性组合,被完全函数依赖。即可称为该关系的候选码
  • 超码:某一关系模式下,某个属性或属性组合,被部分函数依赖。即可称为该关系的超码
  • 候选码是一类特殊的超码
  • 主属性:包含在任何一个候选码中的属性
  • 非主属性:不包含在任何一个候选码中的属性
  • 全码:整个属性组是码
  • 外码:某个属性不是本关系的码,是其他关系模型的码。

2.3.范式

  • 规范化:一个低一级的范式关系模式通过模式分解转换成高级范式关系模型的集合的过程

2.4.2NF

  • R属于1NF,且每个非主属性完全依赖于任何一个候选码,则R属于2NF
  • 2NF消除的是非主属性对码的部分函数依赖

2.4.3NF

  • R属于2NF,若R中不存在这样的 码X,属性组Y,非主属性Z(Z不属于Y)。使得X->Y,Y->Z成立。则符合3NF
  • 3NF消除非主属性对码的传递依赖

2.4.BCNF

  • BCNF消除主属性对码的部份依赖和传递依赖

2.5.多值依赖

  • 多值依赖:BCNF解决的问题都是函数范畴内,但仍然存在数据冗余以及增删改的不方便问题。
  • 特性:
    • 对称性
    • 传递性
    • 函数依赖可以看作多值依赖的特殊情况
  • 多值依赖的解决要靠4NF

3.数据依赖的公理系统(Armstrong)

  • Armstrong公理系统的推理规则:
    • 自反律
    • 增广律
    • 传递律
  • 根据以上规则,可以继续推出:
    • 合并规则:由X->Y,X->Y,有X->YZ
    • 伪传递规则:由X->Y,WY->Z,有XW->Z
    • 分解规则:由X->Y,Z属于Y,有X->Z
  • Armstrong公理系统是有效的,完备的
    • 有效:由F触发根据公里推导出来的每一个函数依赖一定在F+中
    • 完备:F+中的每一个函数依赖,必定可以由F出发根据Armstrong公理推导出来
  • 闭包问题

零碎:

1.存储过程

  • 优点:
    • 存储过程不像sql语句那样再提出请求时才语法分析和优化,所以高效率
    • 存储过程降低了客户机和服务器的通信量
    • 方便实施企业规则
create or replace procedure <过程名>(参数)
AS
<过程化sql块>

2.事务

  • 事务:用户定义的一个数据库操作序列,这些操作要么全做,要么全部做
  • commit:提交事务
  • rollback:回滚,撤销到事务开始阶段
  • 事务的特性:ACID
    • 原子性
    • 一致性
    • 隔离性
    • 持续性
  • 事务故障类型:
    • 事务内部故障:大多是非预期的,不可由应用程序处理
    • 系统故障:指造成系统停止运转的任何事件,需要重新启动
    • 介质故障
    • 计算机病毒
  • 各类故障对数据库的影响有两种可能性
    • 数据库本身被破坏
    • 数据异常
  • 恢复的原理也很简单:冗余

3.日志

  • 记录事务对数据库的更新操作文件,包括:
    • 开始标记
    • 结束标记
    • 更新操作
  • 登记日志文件,原则:
    • 登记的次序严格按照并发事务执行的时间次序
    • 必须先写日志文件,后写数据库

4.并发控制

  • 交叉并发方式:在单处理机系统中,事物的并发执行实际上是这些并行事务的并行操作轮流交叉运行(实际还是串行)
  • 同时并发方式:在多处理机系统中,可以实现多个事务真正的并行运行
  • 事务是并发控制的基本单位
  • 并发操作带来的数据不一致保活:
    • 丢师修改
    • 不可重复读
    • 读脏数据(读到不正确的数据)
    • 以上错误的原因:并发操作破坏了事务的隔离性
  • 控制并发的主要技术:
    • 封锁
    • 时间戳
    • 乐观控制
    • 多版本并发控制
  • 可串行性 是并发事务正确性的准则

封锁

  • 基本的封锁类型:
    • 排他锁X锁(写锁)
    • 共享锁S锁(读锁)
  • 只存在多事务 同时用S锁对数据上锁,是可以同时进行,其他的组合方式都会被拒绝。
  • 封锁协议:在对数据对象加锁时,还需要规则,例如:
    • 何时申请锁
    • 持锁时间
    • 何时释放
  • 封锁协议的类型
    • 一级封锁协议
      • 事务T在修改数据R之前必须对其加X锁,直至事务结束才能释放
      • 一级封锁协议可防止丢失修改,保证事务T是可恢复的
      • 在一级封锁协议中,读数据是不需要加锁的,所以她不能保证可重复读,不读脏数据
    • 二级封锁协议
      • 在一级封锁的基础上增加事务T在读取数据R之前必须加S锁,读完后释放S锁
      • 防止读脏
    • 三级封锁协议
      • 在一级封锁协议的基础上增加事务T在读取数据之前R必须先对其加S,事务结束再释放
      • 做到了防止重复读
    • 该三级协议的主要区别在于 什么时候申请封锁,什么时候释放锁

活锁

  • 封锁是可能导致产生操作系统中的异常状态的
  • 活锁:某个事务的请求永远得不到处理,资源被抢占
  • 解决方法:采用FIFO

死锁

  • 死锁:互相等待的状况
  • 死锁预防:
    • 一次封锁法:要求每个事务必须一次将所有要用的数据全部加锁
    • 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实施封锁
      • 成本太高
  • 死锁的诊断与解除
    • 超时法:设定时长,解锁
      • 短了可能误判,长了可能没用
    • 等待图法:不可产生回路,即可解决
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容