感谢内容提供者:金牛区吴迪软件开发工作室

上一篇:数据库系统原理 - - (5)数据库编程

文章目录

  • 六:数据库安全与保护
    • 一、数据库完整性
      • 1.什么是数据库完整性
      • 2.完整性的约束条件的作用对象
      • 3.定义与实现完整性的约束
        • 1)有哪些完整性约束
        • 2)实体完整性约束
        • 3)主键列必须遵守的规则
          • 主键和候选键的语句与关键字
          • 主键和候选键的区别
        • 4)参照完整性约束
        • 5)用户定义的完整性约束
      • 4.命名完整性约束
      • 5.更新完整性约束
    • 二、触发器
      • 什么是触发器?
      • 1.创建触发器
      • 2.删除触发器
      • 3.使用触发器
        • 1)INSERT触发器
        • 2)DELETE触发器
        • 3)UPDATE触发器
    • 三、安全性与访问控制
      • 1.用户账号管理
        • 1)身份验证
        • 2)数据库用户权限确认
        • 3)用户账号管理
        • 4)删除用户账号
        • 5)修改用户账号
        • 5)修改用户登录口令
      • 2.账号权限管理
        • 1)使用GRANT语句为用户授权
        • 2)权限的转移
        • 3)权限的回收
    • 四、事务与并发控制
      • 1.事物的概念
      • 2.事物的特征ACID
        • 1)原子性Atomicity
        • 2)一致性Consistency
        • 3)隔离性Isolation
        • 4)持续性Durability
      • 3.并发操作会导致的问题
      • 4.封锁
        • 1)锁
        • 2)用封锁进行并发控制
        • 3)封锁的粒度
        • 4)封锁的级别
        • 5)死锁和活锁
          • 死锁四种解决方法:
        • 6)可串行性
        • 7)俩段封锁法(Two-Phase Locking,2PL)
    • 五、备份与恢复
      • 1.数据库备份与恢复的概念
      • 2.备份数据的方法
      • 3.恢复数据的方法

六:数据库安全与保护

一、数据库完整性

1.什么是数据库完整性

数据库完整性是指数据库中数据的正确性和相容性。

2.完整性的约束条件的作用对象

3.定义与实现完整性的约束

1)有哪些完整性约束
  1. 实体完整性约束
  2. 参照完整性约束
  3. 用户定义的完整性约束
2)实体完整性约束

在MySQL中,实体完整性约束是通过主键约束和候选键约束实现的。

  • 主键约束:PRIMARY KEY
  • 候选键约束:UNIQUE
3)主键列必须遵守的规则

主键和候选键的语句与关键字

候选键约束也可以使用 CREATE UNIQUE INDEX创建

主键和候选键的区别

4)参照完整性约束

在MySQL中,参照完整性约束是通过外键声明实现的。

  • 外键声明:FOREIGN KEY
// tbl_name -- 指定外键所参照的表名
// field_name  --  指定被参照的列名
// reference_option  --  约束策略
REFERENCES tbl_name(field_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]

约束策略
1.RESTRICT - - 限制策略 【默认策略】
2.CASCADE - - 级联策略
3.SET NULL - - 置空策略
4.NO ACTION - - 不采取实施策略

5)用户定义的完整性约束
  1. 非空约束 NOT NULL
  2. CHECK约束 CHECK(expr)
  3. 触发器 TRIGGER

4.命名完整性约束

// symbol -- 指定的约束名字【唯一的】
// 只能给基于表的完整性约束指定名字
// 无法给基于列的完整性约束指定名字
// 如果没有命名,数据库会自动创建一个唯一名字
CONSTRAINT[symbol]

5.更新完整性约束

使用ALTER TABLE语句更新与列或表有关的各种约束。

  1. 完整性约束不能直接被修改。【必须先删除,再增加】
  2. 使用ALTER TABLE语句,可以独立地删除完整性约束,而不会删除表本身。(DROP TABLE 语句删除一个表,则表中所有的完整性约束都会被自动删除)

二、触发器

什么是触发器?

是用户定义在关系表上的一类由时间驱动的数据对象。
也是一种保证数据完整性的方法。

小拓展:在触发器的创建中,每个表每个事件每次只允许一个触发器,因此每个表最多支持的触发器是6个。

1.创建触发器

// 使用CREATE TRIGGER语句创建触发器
// trigger_name 触发器名字
// trigger_time 指定触发的时刻
// trigger_event 指定触发的事件
// tbl_name 指定与触发器相关联的表名
// FOR EACH ROW 指定对于受触发事件影响的每一行都要激活触发器的动作
// trigger_body 指定触发器的动作主体
CREATE TRIGGER
trigger_name
trigger_time
trigger_event
ON tbl_name
FOR EACH ROW
trigger_body;
// 示例:在数据库mysql_test的表customers中
// 创建一个触发器customers_insert_trigger
// 用于每次向表customers插入一行数据时
// 将用户变量str的值设置为one customer added!
USE mysql_test;
CREATE TRIGGER
customers_insert_trigger
AFTER
INSERT
ON customers
FOR EACH ROW
SET @str='one customer added!';// 查看用户变量
select @str;

2.删除触发器

DROP TRIGGER [IF EXISTS] trigger_name;// 示例:删除数据库test中的触发器insert_trigger;
DROP TRIGGER IF EXISTS test.insert_trigger;

3.使用触发器

1)INSERT触发器

在INSERT触发器代码内,可引用一个名为NEW(不区分大小写)的虚拟表,来访问被插入的行。

在BEFORE INSERT触发器中,NEW中的值可以被更新。

// 示例:在数据库test中重新创建触发器insert
// 用于每次向表customers插入一行数据时,将用户变量str的值设置为新插入客户的id号。
CREATE TRIGGER test.insert
AFTER INSERT
ON test.customers
FOR EACH ROW
set @str=new.id;
2)DELETE触发器

在DELETE触发器代码内,可引用一个名为OLD(不区分大小写)的虚拟表,来访问被删除的行。
OLD中的值全部是只读的,不能被更新。

3)UPDATE触发器

在UPDATE触发器代码内,可引用一个名为OLD(不区分大小写)的虚拟表,来访问UPDATE语句执行前的值,也可以引用一个名为NEW(不区分大小写)的虚拟表来访问更新后的值。

// 在数据库test的表customers中创建一个触发器update_trigger
// 用于每次更新表customers时
// 将该表中address列的值设置为contact列的值。
CREATE TRIGGER test.customers.update_trigger
BEFORE UPDATE
ON test.customers
FOR EACH ROW
SET NEW.address=OLD.contact;

三、安全性与访问控制

1.用户账号管理

数据库的安全性是指保护数据库以防止不合法的使用而造成数据泄露、更改或破坏,所以安全性对于任何一个DBMS来说都是至关重要的。

1)身份验证
// 查看数据库的用户
select user from mysql.user;
2)数据库用户权限确认
3)用户账号管理

使用CREATE USER语句创建MySQL账户。

// 创建用户账号格式:'user_name'@'host_name'
// 默认主机名%
// IDENTIFIED BY:可选性,指定用户账号对应的口令
// PASSWORD:可选性,指定散列口令
CREATE USER user[IDENTIFIED BY [PASSWORD]'password']// 示例:在服务器中添加俩个新用户,其用户名分别为zhangsan和lisi,他们的主机名均为localhost,zhangsan的口令为123,用户lisi的口令为对明文456使用PASSWORD()函数加密返回的散列值。
SELECT md5('456');
// 5.5版本的话是SELECT PASSWORD(456);
// 把这个值去写到下面xxx的位置CREATE USER 'zhangsan'@'localhost'
IDENTIFIED BY '123',
CREATE USER 'lisi'@'localhost'
IDENTIFIED BY PASSWORD'xxx';


4)删除用户账号

使用DROP USER语句删除用户账号

// 注意要加主机的名字
DROP USER user[,user]...;// 示例:删除lisi用户
DROP USER 'lisi'@'localhost';
5)修改用户账号

使用RENAME USER 语句修改用户账号

// 修改名字
RENAME USER old_user TO new_user[,old_user TO new_user]...;
// 示例:将zhangsan改成wangwu
RENAME USER 'zhangsan'@'localhost'
TO 'wangwu'@'localhost';
5)修改用户登录口令

使用SET PASSWORD语句修改用户登录口令

// FOR user:可选性,指定想修改的用户账号
SET PASSWORD[FOR user] =
{PASSWORD('new_password')| 'encrypted password'
}// 示例:
SET PASSWORD FOR 'username'@'localhost' = PASSWORD('pass');

2.账号权限管理

1)使用GRANT语句为用户授权

priv_type:用于指定权限的名称
column_list:用于指定权限要授予给表中哪些具体的列
object_type:用于指定权限授予的对象和级别
user_specification:用于设定用户的口令,以及指定被授予权限的用户user
WITH GRANT OPTION:可选性,用于实现权限的转移或限制

// 示例:授予用户zhangsan在数据库mysql_test的表customers上
// 用于对列cust_id和列cust_name的SELECT权限。
GRANT SELECT (cust_id, cust_name)
ON mysql_test.customers
TO 'zhangsan'@'localhost';// 示例:授予当前系统中一个不存在的用户liming和用户huang,
// 要求创建这俩个用户,并设置对应的系统登录命令,
// 同时授予他们在数据库mysql_test的表customers上拥有SELECT和UPDATE的权限。GRANT SELECT,UPDATE
ON mysql_test.customers
TO 'liming'@'localhost' IDENTIFIED BY 'abc',
'huang'@'localhost' IDENTIFIED BY 'cba';

GRANT ALL
ON mysql_test.*
TO 'wangwu'@'localhost';

GRANT CREATE USER
ON *.*
TO 'wangwu'@'localhost';
2)权限的转移

GRANT SELECT,UPDATE
ON mysql_test.customers
TO 'zhou'@'localhost' IDENTIFIED BY 'abc'
WITH GRANT OPTIONS;
3)权限的回收

使用REVOKE语句撤销用户权限

REVOKE priv_type[(column_list)][,priv_type[(column_list)]]...
ON [object_type] priv_level
FROM user[user]...;

REVOKE SELECT
ON mysql.test.customers
FROM 'zhow'@'localhost';

四、事务与并发控制

1.事物的概念

所谓事物是用户定义的一个数据操作序列,这些操作可作为一个完整的工作单元,要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务中的操作一般是对数据的更新操作,包括:增、删、改。

以BEGIN TRANSACTION语句开始
以 COMMIT【提交】 语句或 ROLLBACL【回滚】 语句结束

2.事物的特征ACID

详细内容请看:ACID(数据库事务正确执行的四个基本要素)

1)原子性Atomicity

事物是不可分割的最小单位,所包含的这些操作是一个整体。

2)一致性Consistency

事物必须满足数据库的完整性约束,且事务执行完毕后将数据库由一个一致性状态转变到另一个一致性状态。

3)隔离性Isolation

事务是彼此独立的、隔离的,即一个事务的执行不能被其他事务所干扰。

4)持续性Durability

也叫永久性,是指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,且接下来的其他操作或故障对其执行结果无影响。

3.并发操作会导致的问题

4.封锁

1)锁

一个锁实质上就是允许或阻止一个事务对一个数据对象的存取特权。

基本的封锁类型:

  1. 排他锁(X锁),用于写操作。
  2. 共享锁(S锁),用于读操作。
2)用封锁进行并发控制

封锁的工作原理:

  1. 若事物T对数据D加了X锁,则所有别的事务对数据D的锁请求都必须等待直到事务T释放锁。
  2. 若事务T对数据D加了S锁,则别的事务还可对数据D请求S锁,而对数据D的X锁请求必须等待直到事务T释放锁。
  3. 事务执行数据库操作时都要先请求相应的锁,即对读请求S锁,对更新(插入、删除、修改)请求X锁。这个过程一般是由DBMS在执行操作时自动隐含地进行。
  4. 事务一直占有获得的锁直到结束(COMMIT 或 ROLLBACK)时释放。
3)封锁的粒度

我们通常以粒度来描述封锁的数据单元的大小

DBMS可以决定不同粒度的锁

粒度 越细 ,并发性就 越大 ,但软件复杂性和系统开销也就 越大 。

并发量指的是同时支持的事务数量。

4)封锁的级别

封锁的级别又称为一致性级别或隔离度。

  • 0级封锁:指封锁的事务不重写其他非0级封锁事务的未提交的更新数据。该状态实用价值不大。
  • 1级封锁:指被封锁的事务不允许重写未提交的更新数据。防止了丢失更新的发生。
  • 2级封锁:指被封锁的事务既不能重写也不读未提交的更新数据。这除了一级锁的效果外还防止了读脏数据。
  • 3级封锁:指被封锁的事务不读未提交的更新数据,不写任何(包括读操作)未提交数据,防止了不可重读的问题。这是严格的封锁,它保证了多个事务并发执行的“可串行化”。
5)死锁和活锁

死锁四种解决方法:
  1. 一次性锁请求
  2. 锁请求排序
  3. 序列化处理
  4. 资源剥夺
6)可串行性

一组事务的一个调度就是它们的基本操作的一种排序。

在数据库系统中,可串行性就是并发执行的正确性准则,即当且当一组事务的并发执行调度是可串行化的,才认为它们是正确的。

7)俩段封锁法(Two-Phase Locking,2PL)
  1. 发展(Growing)或加锁阶段
  2. 收缩(Shrinking)或释放阶段

五、备份与恢复

1.数据库备份与恢复的概念

有可能发生下述故障,所以才要进行数据备份

2.备份数据的方法

FIELDS和LINES - - 决定数据行在备份文件中存储的格式
TERMINATED BY - - 指定字段值之间的符号
DUMPFILE - - 导出的备份文件里面所有的数据行都会彼此紧挨着放置

3.恢复数据的方法



下一篇:数据库系统原理 - - (7、8)数据库应用设计与开发实例 + 数据管理技术的发展

数据库系统原理 - - (6)数据库安全与保护相关推荐

  1. 数据库系统原理 - - (5)数据库编程

    感谢内容提供者:金牛区吴迪软件开发工作室 上一篇:数据库系统原理 - - (4)SQL与关系数据库基本操作 文章目录 第五章:数据库编程 一.存储过程 1.存储过程的基本概念 2.创建存储过程 1)D ...

  2. 数据库系统原理 - - (7、8)数据库应用设计与开发实例 + 数据管理技术的发展

    感谢内容提供者:金牛区吴迪软件开发工作室 上一篇:数据库系统原理 - - (6)数据库安全与保护 文章目录 七章:数据库应用设计与开发实例 一.需求描述与分析 二.系统设计 三.系统实现 四.系统测试 ...

  3. 数据库系统原理期末复习

    数据库系统原理期末复习 这是本人整理的数据库系统原理的复习资料,按照四个课程目标所划的知识点进行复习,时间充裕的同学可对照文末各章复习知识点查漏补缺. 一.课程目标1:数据库基础知识应用 20分 数据 ...

  4. 数据库系统原理与实践题库及答案(完整版)

    数据库系统原理与实践题库及答案 1.简要说明数据.数据库.数据库管理系统和数据库系统的概念. 答:数据:数据库中存储的基本对象是数据(Data),从计算机的角度来看,数据是指能够被计算机存储和处理的符 ...

  5. 自考-知识点总结-数据库系统原理 04735

    数据库系统原理 第一章 数据库系统概述 数据库基本概念 数据:符号记录(文本或多媒体) 数据库(DB):长期储存.有组织.可共享 的数据集合 数据库管理系统(DBMS):建立与管理数据库的软件 基本功 ...

  6. 数据库系统原理复习提纲

    数据库系统原理复习提纲 参考文献:A First Course in Database Systems | 3rd Edition Authors:Jennifer Widom,Jeffrey D U ...

  7. 数据库系统原理(1)--绪论

    基本说明 数据库系统原理的系列章节是基于<数据库系统原理>的基础之上,结合自己的心得与体会进行的归纳总结. 由于这些内容都是自己对数据库相关内容学习的最初理解,因此有所不妥的地方欢迎批评指 ...

  8. 数据库系统原理(BNU_党德鹏_慕课)超详细听课笔记

    数据库系统原理 笔记 第一章 绪论 第一节 数据库 第二节 数据库管理系统 第三节 数据管理技术发展趋势 第二章 关系模型 第一节 关系结构和约束 第二节 基本关系代数运算 第三节 附加关系代数运算 ...

  9. 数据库系统原理 - - (1)数据库系统概论

    感谢内容提供者:金牛区吴迪软件开发工作室 文章目录 一:数据库系统概论 1.数据库基本概念 a.什么是数据? b.什么是数据库? c.数据库中存储的数据的三个基本特点 d.数据库管理系统及其功能 e. ...

最新文章

  1. AI解决方案:边缘计算和GPU加速平台
  2. LeetCode:115. Distinct Subsequences
  3. [Android]打开eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。...
  4. volatile的用法
  5. Boost 编译链接
  6. 《多处理器编程的艺术》读书笔记(2)--- 互斥
  7. 深入Go的底层,带你走近一群有追求的人
  8. 贪心 Codeforces Round #273 (Div. 2) C. Table Decorations
  9. POJ 1003 解题报告
  10. weight_decay一般设置为多少_50岁的夫妻一般有多少存款?他们在为养老做准备吗?...
  11. Windows核心编程_提权
  12. 深度学习中的Attention总结
  13. 数据结构图之二(最小生成树--普里姆算法)
  14. AR8035 linux
  15. 苹果电脑一直密码错误_您可能一直都在犯的安全和密码错误
  16. 计算机网络——IPv4地址概述
  17. c++、7-5 估算数学常数e的值
  18. 【工具】VScode|Linux 中怎么调试 Python 项目比较方便?又名 VScode 怎么调试 Python 项目(兼容环境Ubuntu18.04)
  19. 使用FileDownloader下载文件(举例版本更新下载apk文件)
  20. 百度地图离线开发2.0

热门文章

  1. SCRM会员管理营销平台方案的核心功能详解
  2. 华恩JAVA班第22天
  3. yarn和npm区别
  4. vue中使用vuex(超详细)
  5. tl494c封装区别_TL494芯片详细资料
  6. 直付通,支付宝白名单D0,接口申请及对接流程
  7. PTA(Basic Level) 1072:开学寄语(C语言实现)
  8. 实用的60个CSS代码片段[转] 博客链接:http://blog.poetries.top
  9. 用事实告诉你企业竞争优势的企业资源判断标准
  10. js弹出页面窗口和关闭