数据库系统概论 ---- 第四章 -- 数据库安全性

文章目录

    • 4.1 数据库安全性概述
      • 4.1.1 数据库的不安全因素
    • 4.2 数据库安全性控制
      • 4.2.1 用户身份识别
      • 4.2.2 存取控制
      • 4.2.3 自主存取控制
      • 4.2.4 授权:授权与收回
        • 1. GRANT
        • 2. 创建用户
        • 3. 查看用户权限
        • 4. 删除用户
        • 5. 查看所有用户的信息
        • 6. REVOKE
        • 7. 创建数据库模式的权限
        • 8. MySQL授予创建权限:
      • 4.2.5 数据库角色
        • 1. 角色的创建
        • 2. 给角色授权
        • 3. 将一个角色授予其他的角色或用户
        • 4. 角色权限的收回
    • 4.3 视图机制
    • 4.4 审计
    • 4.5 数据加密
    • 4.6 其他安全保护


4.1 数据库安全性概述

数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏

4.1.1 数据库的不安全因素

  1. 非授权用户对数据库的恶意存取和破坏
  2. 数据库中重要或敏感的数据被泄露
  3. 安全环境的脆弱性

4.2 数据库安全性控制

与数据库安全性有关的技术,主要包括:

  • 用户身份识别
  • 多层存取控制
  • 审计
  • 视图
  • 数据加密

4.2.1 用户身份识别

用户身份识别是数据库管理系统提供的最外层安全保护措施。

4.2.2 存取控制

存取控制机制主要包括:

  • 定义用户权限
    定义用户权限,并将用户权限登记到数据字典中。
    用户对某一数据对象的操作权利称为权限
  • 合法权限检查

定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统

C2级数据库管理系统支持自主存取控制
B1级数据库管理系统支持强制存取控制

  1. 自主存取控制
    用户对于不同的数据库对象有不同的存取权限,不同用户对同一对象也有不同的权限,用户可以将拥有的存取权限转授给其他用户。
    自主存取控制非常灵活
  2. 强制存取控制
    每一个数据库对象被标以一定的密级,每一个用户也被授予一个级别的许可证,对于任意一个对象,只有具有合法许可证的用户才可以存取。
    强制存取控制相对比较严格

4.2.3 自主存取控制

主要通过SQL的 GRANT 和 REVOKE 来实现。

用户权限由两个要素组成

  1. 数据库对象
  2. 操作类型

定义一个用户的存取权限就是要定义这个用户可以在哪些数据库对象上进行哪些类型的操作。

在数据库系统中,定义存取权限称为授权

关系数据库系统中的存取权限:
数据库系统概论 ---- 第四章 -- 数据库安全性_第1张图片

4.2.4 授权:授权与收回

SQL中使用GRANT向用户授予权限,使用REVOKE向用户收回权限。

1. GRANT
GRANT 权限 [,权限] ...
ON 对象类型 对象名 [,对象类型 对象名 ] ...
TO 用户 [, 用户]
[ WITH GRANT OPTION ];
  • 语义:将指定操作对象的指定操作权限授予指定的用户
  • 发出GRANt语句的可以是数据库管理员,也可以是数据库对象的创建者,还可以是拥有该权限的用户
  • 接受权限的用户可以是一个或多个具体用户
  • 指定了 WITH GRANT OPTION 子句,获得某种权限的用户可以把权限授予其他用户,没有指定 WITH GRANT OPTION 字句,只能使用该权限,不能转授权限。
  • 具有 WITH GRANT OPTION 的用户可以把相应的权限或其子集转授给其他用户,但是不允许循环授权
    数据库系统概论 ---- 第四章 -- 数据库安全性_第2张图片
2. 创建用户
CREATE USER 'username'@'host' 
IDENTIFIED BY 'password';
  • username:用户名
  • host:指定用户可以登录MySQL数据库的主机地址
    localhost代表本机的地址
    % 为所有主机均可登录数据库
  • password:用户登录数据库密码
3. 查看用户权限
SHOW GRANTS FOR 'username'@'host';
4. 删除用户
DROP USER 'username'@'host';
5. 查看所有用户的信息
SELECT * FROM mysql.user;

创建用户:

CREATE USER 'U1'@'localhost'
IDENTIFIED BY '123456';
CREATE USER 'U2'@'%'
IDENTIFIED BY '123456';
CREATE USER 'U3'@'localhost'
IDENTIFIED BY '123456';
CREATE USER 'U4'@'localhost'
IDENTIFIED BY '123456';
CREATE USER 'U5'@'localhost'
IDENTIFIED BY '123456';
SELECT Host, User
FROM mysql.user;

数据库系统概论 ---- 第四章 -- 数据库安全性_第3张图片

[例4.1]把查询Student表的权限授给用户 U1。

GRANT SELECT
ON TABLE Student
TO 'U1'@'localhost';

SHOW GRANTS FOR 'U1'@'localhost';

数据库系统概论 ---- 第四章 -- 数据库安全性_第4张图片

usage 官方解释:"无权限"的同义词

[例4.2]把对 Student表和 Course表的全部操作权限授予用户U2和U3。

GRANT ALL PRIVILEGES
ON TABLE Student
TO 'U2'@'%', 'U3'@'localhost';

GRANT ALL PRIVILEGES
ON TABLE course
TO 'U2'@'%', 'U3'@'localhost';

SHOW GRANTS FOR 'U2'@'%';

mysql一次赋予多个表的权限会报错
其中,PRIVILEGES 可以省略

数据库系统概论 ---- 第四章 -- 数据库安全性_第5张图片

[例4.3]把对表SC的查询权限赋予所有用户

GRANT SELECT
ON TABLE sc
TO public;

mysql不支持

[例4.4] 把查询Student表和修改学生学号的权限授给用户U4。

GRANT SELECT, UPDATE(Sno)
ON TABLE Student
TO 'U4'@'localhost';

SHOW GRANTS FOR 'U4'@'localhost';

数据库系统概论 ---- 第四章 -- 数据库安全性_第6张图片

[例4.5]把对表SC的 INSERT权限授予U5用户,并允许将此权限再授予其他

GRANT INSERT
ON TABLE sc
TO 'U5'@'localhost'
WITH GRANT OPTION ;

SHOW GRANTS FOR 'U5'@'localhost';

数据库系统概论 ---- 第四章 -- 数据库安全性_第7张图片

由U5用户发上述GRANT命令给其他用户,U5可以将此权限授予U6

CREATE USER 'U6'@'localhost'
IDENTIFIED BY '123456';

使用U5登录数据库

数据库系统概论 ---- 第四章 -- 数据库安全性_第8张图片
由于U5前面只被授予了sc表插入的权限,所以只能看见mydb1下sc表
数据库系统概论 ---- 第四章 -- 数据库安全性_第9张图片

GRANT INSERT
ON TABLE sc
TO 'U6'@'localhost';

在root用户下查看U6的权限:

SHOW GRANTS FOR 'U6'@'localhost';

数据库系统概论 ---- 第四章 -- 数据库安全性_第10张图片

由于U5没有给U6转授权限的权限,所以U6只能使用权限,不能授予其他用户权限。

6. REVOKE
REVOKE 权限 [,权限] ...
ON 对象类型 对象名 [,对象类型 对象名 ] ...
FROM 用户 [, 用户] [CASCADE | RESTRICT];

[例4.8]把用户U4修改学生学号的权限收回。

REVOKE UPDATE(Sno)
ON TABLE student
FROM 'U4'@'localhost';

SHOW GRANTS FOR 'U4'@'localhost';

数据库系统概论 ---- 第四章 -- 数据库安全性_第11张图片

[例4.9]收回所有用户对表SC的查询权限。

REVOKE SELECT
ON TABLE sc
FROM PUBLIC;

mysql不支持

[例4.10]把用户U5对SC表的INSERT权限收回。

级联收回U6,mysql不支持cascade | restrict

mysql默认不会级联收回

REVOKE INSERT
ON TABLE sc
FROM 'U5'@'localhost';

SHOW GRANTS FOR 'U5'@'localhost';
SHOW GRANTS FOR 'U6'@'localhost';

数据库系统概论 ---- 第四章 -- 数据库安全性_第12张图片
在这里插入图片描述

用户可以 “自主”地决定 将数据的存取权限授予何人、决定是否也将“授权”的权限授予别人。因此称这样的存取控制是 自主存取控制

7. 创建数据库模式的权限
CREATE USER username [WITH] [DBA | RESOURCE | CONNECT]

mysql不支持

  • 新创建的数据库用户有三种权限: CONNECT、 RESOURCE和DBA。
  • 默认该用户拥有CONNECT权限。拥有CONNECT权限的用户不能创建新用户,不能创建模式,也不能创建基本表,只能登录数据库。
  • 拥有RESOURCE权限的用户能创建基本表和视图,成为所创建对象的属主,但不能创建模式,不能创建新的用户。
  • 拥有DBA权限的用户是系统中的超级用户,可以创建新的用户、创建模式、创建基本表和视图等: DBA拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户。
8. MySQL授予创建权限:
  • 创建数据库权限,但是无删除权限
GRANT CREATE
ON *.*
TO 'U2'@'%';

SHOW GRANTS FOR 'U2'@'%';

数据库系统概论 ---- 第四章 -- 数据库安全性_第13张图片

第一个 * 表示数据库,第二个 * 表示表格

  • 授予用户最高权限:
GRANT ALL PRIVILEGES
ON *.*
TO 'U3'@'localhost';

SHOW GRANTS FOR 'U3'@'localhost';

数据库系统概论 ---- 第四章 -- 数据库安全性_第14张图片

4.2.5 数据库角色

mysql8.0 以上才支持角色
mysql用户被授予角色还要激活(授予角色的授予者进行激活)
`set default role all to 用户

数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合

可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。

在SQL中首先用CREATE ROLE语句创建角色,然后用GRANT语句给角色授权用REVOKE语句收回授予角色的权限

1. 角色的创建

创建角色的SQL语句格式是:

CREATE ROLE 角色名;

刚刚创建的角色是空的,没有任何内容。

CREATE ROLE r1;

SHOW GRANTS FOR r1;

在这里插入图片描述

2. 给角色授权

数据库管理员和用户可以利用GRANT语句将权限授予某一个或几个角色。

GRANT 权限
ON 对象类型 对象名
TO 角色;
CREATE ROLE r2;

GRANT SELECT
ON TABLE mydb1.sc
TO r1, r2;

SHOW GRANTS FOR r2;

数据库系统概论 ---- 第四章 -- 数据库安全性_第15张图片

3. 将一个角色授予其他的角色或用户
GRANT 角色
TO 角色 | 用户
WITH ADMIN OPTION;
  • 该语句把角色授予某用户,或授予另一个角色。
  • 一个角色所拥有的权限就是授予它的全部角色所包含的权限的总和。
  • 授予者或者是角色的创建者,或者是拥有在这个角色上的ADMIN OPTION。
  • 如果指定了WITH ADMIN OPTION子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色
  • 一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限。
GRANT r1
TO 'U1'@'localhost'
WITH ADMIN OPTION ;

SHOW GRANTS FOR 'U1'@'localhost';

数据库系统概论 ---- 第四章 -- 数据库安全性_第16张图片

mysql8.0 以上才支持角色
mysql用户被授予角色还要激活(授予角色的授予者进行激活)
`set default role all to 用户

4. 角色权限的收回
REVOKE 权限 [, 权限]
ON 对象类型 对象名
FROM 角色 [, 角色];

用户可以收回角色的权限,从而修改角色拥有的权限。

REVOKE 的执行者是角色的创建者或拥有这个角色上ADMIN OPTION

例:通过角色来实现一组权限授予一个用户
创建角色role1

CREATE ROLE role1;

给角色role1授予Student表的查询、更新、插入权限

GRANT SELECT, UPDATE, INSERT
ON TABLE Student
TO role1;

将role1授予U3,U5

GRANT role1
TO 'U3'@'localhost', 'U5'@'localhost';

收回U3的role1角色

REVOKE role1
FROM 'U3'@'localhost';

数据库系统概论 ---- 第四章 -- 数据库安全性_第17张图片
数据库系统概论 ---- 第四章 -- 数据库安全性_第18张图片

修改role1的权限

GRANT DELETE
ON TABLE Student
TO role1;

REVOKE SELECT
ON TABLE student
FROM role1;

SHOW GRANTS FOR role1;

数据库系统概论 ---- 第四章 -- 数据库安全性_第19张图片

4.3 视图机制

可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内。

也就是说,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护。

视图机制间接地实现支持存取谓词的用户权限定义。

[例4.14] 建立计算机系学生的视图,把对该视图的SELECT 权限授予王平,把该视图上的所有操作权限授予张明。

CREATE VIEW CS_stu
AS
    SELECT *
    FROM student
    WHERE Sdept = 'CS';
CREATE USER '王平'@'%'
IDENTIFIED BY '123456';
CREATE USER '张明'@'%'
IDENTIFIED BY '123456';

GRANT SELECT
ON TABLE CS_stu
TO '王平'@'%';

GRANT ALL
ON CS_stu
TO '张明'@'%';

SHOW GRANTS FOR '王平'@'%';
SHOW GRANTS FOR '张明'@'%';

在这里插入图片描述
在这里插入图片描述

4.4 审计

审计功能把用户对数据库的所有操作自动记录下来放入审计日志中。

审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。

4.5 数据加密

数据加密主要包括:

  • 存储加密
  • 传输加密

4.6 其他安全保护

  • 推理控制
  • 隐蔽信道

你可能感兴趣的:(数据库系统概论,数据库,database,DB,数据库系统概论,mysql)