数据库安全性

  • 4.1 数据库安全性概述
    • 4.1.1 数据库的不安全因素
  • 4.2 数据库安全性控制
    • 4.2.1 用户身份鉴别
      • 用户身份鉴别的方法
    • 4.2.2 存取控制
    • 4.2.3 自主存取控制方法
    • 4.2.4 授权:授予与回收
      • 权限授予:`GRANT`
      • 权限回收:`REVOKE`
      • 创建数据库模式的权限
    • 4.2.5 数据库角色
      • 什么是数据库角色
        • 使用角色管理数据库权限
    • 4.2.6 强制存取控制方法
      • 强制存取控制(MAC)
      • DAC + MAC安全检查
    • 小结
  • 4.3 视图机制
  • 4.4 审计(Audit)
  • 小结

问题的提出

  • 数据库的一大特点是数据可以共享
  • 数据共享必然带来数据库的安全性问题
  • 数据库系统中的数据共享不能是无条件的共享 => 数据库安全性
    例: 军事秘密、国家机密、新产品实验数据、市场需求分析、市场营销策略、销售计划、客户档案、医疗档案、银行储蓄数据

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

系统安全保护措施是否有效是数据库系统主要的性能指标之一。

4.1 数据库安全性概述

4.1.1 数据库的不安全因素

  • 非授权用户对数据库的恶意存取和破坏

    • 一些黑客(Hacker)和犯罪分子在用户存取数据库时猎取用户名和用户口令,然后假冒合法用户偷取、修改甚至破坏用户数据。
    • 数据库管理系统提供的安全措施主要包括用户身份鉴别、存取控制和视图等技术。
  • 数据库中重要或敏感的数据被泄露

    • 黑客和敌对分子千方百计盗窃数据库中的重要数据,一些机密信息被暴露。
    • 数据库管理系统提供的主要技术有强制存取控制、数据加密存储和加密传输等。
    • 审计日志分析
  • 安全环境的脆弱性

    • 数据库的安全性与计算机系统的安全性紧密联系
    • 计算机硬件、操作系统、网络系统等的安全性
    • 建立一套可信(Trusted)计算机系统的概念和标准

4.2 数据库安全性控制

  • 系统根据用户标识鉴定用户身份,合法用户才准许进入计算机系统
  • 数据库管理系统进行存取控制,只允许用户执行合法操作
  • 操作系统有自己的保护措施
  • 数据以密码形式存储到数据库中

数据库安全性控制的常用方法:

  • 用户身份鉴别
  • 存取控制(考试只考这个)
  • 视图
  • 审计
  • 数据加密


DBMS对提出SQL访问请求的数据库用户进行身份鉴别,防止不可信用户使用系统。
在SQL处理层进行自主存取控制和强制存取控制,进一步可以进行推理控制。
对用户访问行为和系统关键操作进行审计,对异常用户行为进行简单入侵检测。

4.2.1 用户身份鉴别

用户身份鉴别(Identification & Authentication)

  • 系统提供的最外层安全保护措施
  • 用户标识:由用户名和用户标识号组成
    (用户标识号在系统整个生命周期内唯一)

用户身份鉴别的方法

(1) 静态口令鉴别

  • 静态口令一般由用户自己设定,这些口令是静态不变的

(2) 动态口令鉴别

  • 口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法

(3) 智能卡鉴别

  • 智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能

(4) 生物特征鉴别

  • 通过生物特征进行认证的技术,生物特征如指纹、虹膜和掌纹等

4.2.2 存取控制

存取控制机制组成:

  • 定义用户权限,并将用户权限登记到数据字典中

    • 用户对某一数据对象的操作权力称为权限
    • DBMS提供适当的语言来定义用户权限,存放在数据字典中,称做安全规则或授权规则
  • 合法权限检查
    • 用户发出存取数据库操作请求
    • DBMS查找数据字典,进行合法权限检查

用户权限定义和合法权检查机制一起组成了DBMS的存取控制子系统。

4.2.3 自主存取控制方法

自主存取控制(Discretionary Access Control ,简称DAC

  • 用户对不同的数据对象有不同的存取权限
  • 不同的用户对同一对象也有不同的权限
  • 用户可‘自主’决定将其拥有的存取权限转授给其他用户

通过 SQL 的 GRANT语句和REVOKE语句实现

4.2.4 授权:授予与回收

权限授予:GRANT

语义:将对指定操作对象的指定操作权限授予指定的用户

GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];

发出GRANT

  • 数据库管理员
  • 数据库对象创建者(即属主Owner)
  • 拥有该权限、并能将该权限转授出去的用户

按受权限的用户

  • 一个或多个具体用户
  • PUBLIC(即全体用户)

[例4.1]:把查询Student表权限授给用户U1
(将一种权限授予一个用户)

GRANT SELECT
ON TABLE Student
TO U1;

[例4.2]:把对Student表和Course表的全部权限授予用户U2和U3
(一次向多个用户传播多种同类对象的权限。)

GRANT ALL PRIVILEGES
ON TABLE Student, Course
TO U2, U3;

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

GRANT SELECT
ON TABLE SC
TO PUBLIC;

[例4.4]:把查询Student表和修改学生学号的权限授给用户U4
(一次完成了对基本表和属性列这些不同对象的授权)
对属性列的授权时必须明确指出相应属性列名

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

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

GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION; #允许他再将此权限授予其他用户

执行该语句后,U5不仅拥有了对表SC的INSERT权限,还可以传播此权限:

[例4.6]

GRANT INSERT
ON TABLE SC
TO U6
WITH GRANT OPTION;

同样U6还可以将此权限授予U7。

[例4.7]

GRANT INSERT
ON TABLE SC
TO U7;

但U7不能再传播此权限。

权限回收:REVOKE

授予的权限可以由数据库管理员或其他授权者用REVOKE语句收回。

REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
# CASCADE:级联回收
# RESTRICT:受限回收

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

REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;

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

REVOKE SELECT
ON TABLE SC
FROM PUBLIC;

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

REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE ;

如果系统缺省值为RESTRICT,回收U5的INSERT权限时应该使用CASCADE,否则拒绝执行该语句

如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限

执行例4.8~4.10语句后学生-课程数据库中的用户权限定义表:

创建数据库模式的权限


模式、基本表、视图、索引是由数据库管理员在创建用户时实现
基本表和视图、属性列是由GRANT/REVOKE决定的。

CREATE USER语句格式:

CREATE USER <username>
[WITH][DBA|RESOURCE|CONNECT];

注:CREATE USER不是SQL标准,各个系统的实现相差甚远。

4.2.5 数据库角色

如果要对多个用户赋予相同的权限,下面操作会很麻烦;

GRANT SELECT, UPDATE, INSERT
ON TABLE Student
TO U1, U2;
GRANT SELECT, UPDATE(Ccredit)
ON TABLE Course
TO U1, U2;
GRANT SELECT, INSERT
ON TABLE SC
TO U1, U2;
##########################
GRANT SELECT, UPDATE, INSERT
ON TABLE Student
TO U3;
GRANT SELECT, UPDATE(Ccredit)
ON TABLE Course
TO U3;
GRANT SELECT, INSERT
ON TABLE SC
TO U3;

什么是数据库角色

数据库角色:被命名的一组与数据库操作相关的权限

权限

  • 角色是权限的集合
  • 可以为一组具有相同权限的用户创建一个角色
  • 简化授权的过程

使用角色来管理数据库权限,可以简化授权和回收的过程。

使用角色管理数据库权限

创建角色:

CREATE ROLE <角色名>

给角色授权:

GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…

将一个角色授予其他的角色或用户:

GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]

一个角色的权限:直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限指定WITH ADMIN OPTION,则获得权限的角色或用户还可以把这种权限授予其他角色

授予者是角色的创建者或拥有在这个角色上的ADMIN OPTION

角色权限的收回:

REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…

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

  • REVOKE执行者是

    • 角色的创建者
  • 拥有在这个(些)角色上的ADMIN OPTION

[例4.11] 通过角色来实现权限管理。
步骤如下:
(1)首先创建一个角色 R1

CREATE ROLE R1;

(2)然后使用GRANT语句,使角色R1拥有Student表的SELECTUPDATEINSERT权限

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

(3)将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限

GRANT R1
TO 王平,张明,赵玲;

(4)可以一次性通过R1来回收王平的这3个权限

REVOKE R1
FROM 王平;

[例4.12] 增加角色的权限

GRANT DELETE
ON TABLE Student
TO R1;

使角色R1在原来的基础上增加了Student表的DELETE 权限。

[例4.13] 减少角色的权限

REVOKE SELECT
ON TABLE Student
FROM R1;

使R1减少了SELECT权限。

4.2.6 强制存取控制方法

自主存取控制缺点:

  • 可能存在数据的“无意泄露”

强制存取控制(MAC)

  • 保证更高程度的安全性
  • 用户不能直接感知或进行控制
  • 适用于对数据有严格而固定密级分类的部门
    • 军事部门
    • 政府部门

在强制存取控制中,数据库管理系统所管理的全部实体被分为主体客体两大类

主体是系统中的活动实体

  • 数据库管理系统所管理的实际用户
  • 代表用户的各进程

客体是系统中的被动实体,受主体操纵

  • 文件、基本表、索引、视图

敏感度标记(Label)

  • 对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)
  • 敏感度标记分成若干级别
    • 绝密(Top Secret,TS)
    • 机密(Secret,S)
    • 可信(Confidential,C)
    • 公开(Public,P)
    • TS >= S >= C >= P

主体的敏感度标记称为许可证级别(Clearance Level)
客体的敏感度标记称为密级(Classification Level)

强制存取控制规则

  1. 仅当主体的许可证级别大于或等于客体的密级时,该主体才能取相应的客体
  2. 仅当主体的许可证级别小于或等于客体的密级时,该主体才能相应的客体

强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据。

DAC + MAC安全检查

实现强制存取控制MAC时要首先实现自主存取控制DAC
原因:较高安全性级别提供的安全保护要包含较低级别的所有保护
自主存取控制DAC与强制存取控制MAC共同构成数据库管理系统的安全机制。

小结

数据库角色

  • 创建角色
  • 给角色授权
  • 将角色授予用户或其他角色
  • 角色权限的回收

强制存取控制

  • 为主体的每个实例指派一个许可证级别
  • 为客体的每个实例指派一个密级
  • 通过许可证级别与密级间匹配关系进行存取控制

4.3 视图机制

把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护。

授予用户查询整个表的权限:

GRANT SELECT
ON TABLE Student
TO U1;

授予用户查询某些列的权限:

GRANT SELECT(Sno, Sname)
ON TABLE Student
TO U2;

授予用户查询某些行的权限?

  • 需要用存取谓词来定义用户权限
  • 无法直接用GRANT语句实现
  • 可以用视图机制间接地实现

[例4.14] 授权王平老师能查询计算机系学生的情况,授权系主任张明能对计算机系学生的信息进行所有操作。
(1)先建立计算机系学生的视图CS_Student

CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept='CS';

(2)在视图上进一步定义存取权限

GRANT SELECT
ON CS_Student
TO 王平;
GRANT ALL PRIVILIGES
ON CS_Student
TO 张明;

4.4 审计(Audit)


什么是审计

  • 启用一个专用的审计日志(Audit Log)
    将用户对数据库的所有操作记录在上面
  • 审计员利用审计日志
    监控数据库中的各种行为
    发现非法存取,发现潜在威胁
  • C2以上安全级别的DBMS必须具有审计功能

小结

实现数据库系统安全性的技术和方法

  • 用户身份鉴别
  • 存取控制技术:自主存取控制和强制存取控制
  • 视图技术
  • 审计技术
  • 数据加密:加密存储和加密传输

【数据库系统设计】数据库安全性相关推荐

  1. 【数据库系统设计】DBMS的数据库保护

    DBMS的数据库保护 一. 实验目的和要求 二.实验环境(实验设备) 实验前言 三. 实验原理及内容 简单的前置知识 1.创建用户U1和U2 2. 对实验1的SPJ表,用授权机制完成以下存取控制 (1 ...

  2. sqlserver战德臣_数据库系统设计课程最新版 数据库系统上中下三部(哈尔滨工业大学 战德臣教授主讲)...

    数据库系统设计课程最新版 数据库系统上中下三部(哈尔滨工业大学 战德臣教授主讲) 1.JPG (58.27 KB, 下载次数: 1) 2018-3-13 12:02 上传 2.JPG (57.47 K ...

  3. 高铁订票系统css,高铁订票系统-数据库系统设计.pptx

    高铁订票系统-数据库系统设计 高铁订票系统 一 系统功能 1.用户模块:用于用户注册,用户登录,订票,退票. 2.管理员模块:供后台管理员登录,用于添加,修改车次及票务信息. 3.游客模块:车次相关信 ...

  4. 南邮数据库系统设计期中测试题库(雨课堂 + 慕课)

    数据库期中测试题库 友情提示 雨课堂第一章 单选题 多选题 判断题 填空题 雨课堂第二章 单选题 多选题 判断题 雨课堂随堂测试 慕课(基础篇) 慕课(高级篇) 友情提示 用电脑打开, Ctrl + ...

  5. 【数据库系统设计】关系数据库标准语言SQL(3)

    关系数据库标准语言SQL 数据更新 插入数据 插入元组 插入子查询结果 修改数据 修改某一个元组值 删除数据 删除某一个元组的值 删除多个元组的值 带子查询的删除语句 空值的处理 空值的产生 空值的判 ...

  6. 【数据库系统设计】关系数据库标准语言SQL(2)

    关系数据库标准语言SQL 数据查询(连接查询) 等值连接 `=` 自然连接 自身连接 外连接 `LEFR/RIGHT JOIN ... ON` 多表连接 数据查询(嵌套查询 ) 带有`IN`谓词的子查 ...

  7. 【数据库系统设计】关系数据库标准语言SQL(1)

    关系数据库标准语言SQL SQL介绍 SQL的特点 SQL中基本概念 示例:学生-课程 数据库 数据定义 SCHEMA定义 基本表定义(重点) 定义基本表(关系模式) 数据类型 定义基本表示例 修改基 ...

  8. 广州大学数据库实验三——数据库系统设计综合实验

    实验目的 通过实验,使学生掌握数据库系统设计和开发的一般方法,能够设计并实现简单的数据库系统. 实验要求 熟悉实验室实验环境,掌握实验预备知识,了解实验中故障排除的基本方法.实验中根据实验要求完成相应 ...

  9. 中南林业科技大学Java实验报告十二:数据库系统设计 - 从0到1搭建java可视化学生管理系统源代码

    文章目录 实验12 数据库系统设计 12.1 实验目的 12.2 实验内容 12.2.1 设计一个数据库Student,包含成绩表Score,其中属性包含学号,姓名,专业,班级,平均成绩.字段名和类型 ...

最新文章

  1. 30年传奇 侯为贵留下的荣耀和遗憾
  2. 注意!这些行为将会影响征信
  3. 别让for循环毁了你的程序(二)
  4. 工程数学(数值分析)第四讲:插值逼近
  5. mysql 常用配置
  6. python抓取疫情数据_python 爬取疫情数据
  7. Python数据结构与算法(2.7)——跳表
  8. 4 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之Lvs为Mysql-slave做负载均衡
  9. 正负电子碰撞湮灭,电荷哪里去了
  10. numpy复习总结,为深度学习打下基础
  11. oracle的sqlplus命令讲解,SQL*PLUS使用 - Oracle sqlplus命令详解_数据库技术_Linux公社-Linux系统门户网站...
  12. Delayed Project
  13. hive获取数据中位数函数
  14. [NLP论文阅读]Learned in Translation: Contextualized Word Vectors
  15. 模型微调------学习笔记
  16. Anycloud平台LOGO生成方法
  17. 基于动态空间滤波的受损EEG信号的鲁棒性学习
  18. 模拟磁盘调度 课程设计(操作系统 C语言)
  19. 老王课程学习,第八课
  20. CodeGear Releases 3rdrail

热门文章

  1. 产品迭代的节奏怎样适应需求的变化?
  2. 手机一般都由富士康等企业代工,是不是意味着各品牌质量都差不多?
  3. Java转型,多态和契约设计
  4. 电脑解锁后黑屏有鼠标_电脑开机黑屏只有鼠标如何解决
  5. 如何监视SQL Server索引的总大小
  6. SQL Server Reporting Services最佳做法
  7. 三元运算符, @屏蔽错误运算符
  8. [转帖] Windows 与linux的栈大小问题
  9. 如何学习IOS开发~三个字(学思做)
  10. 【续上篇】推荐一款液晶电视测试软件