目录

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

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

4.1 数据库安全性概述

4.1.1 数据库的不安全因素

  1. 非授权用户对数据库的恶意存取和破坏:一些黑客(Hacker)和犯罪分子在用户存取数据库时猎取用户名和用户口令,然后假冒合法用户偷取、修改甚至破坏用户数据。
    • 数据库管理系统提供的安全措施主要包括 用户身份鉴别、存取控制和视图 等技术。
  2. 数据库中重要或敏感的数据被泄露:黑客和敌对分子千方百计盗窃数据库中的重要数据,一些机密信息被暴露。
    • 数据库管理系统提供的主要技术有 强制存取控制、数据加密存储和加密传输 等。
    • 审计日志分析
  3. 安全环境的脆弱性:数据库的安全性与计算机系统的安全性紧密联系
    • 建立一套 可信(Trusted)计算机系统 的概念和标准

4.2 数据库安全性控制

  • 计算机系统中,安全措施是一级一级层层设置
    • 系统根据用户标识鉴定用户身份,合法用户才准许进入计算机系统

    • 数据库管理系统还要进行存取控制,只允许用户执行合法操作

    • 操作系统有自己的保护措施

    • 数据以密码形式存储到数据库中

      https://i-blog.csdnimg.cn/direct/0c74bf3c22fe420b8cafb3b1f91ca910.png

  • 存取控制流程
    • 首先,数据库管理系统对提出SQL访问请求的数据库 用户进行身份鉴别 ,防止不可信用户使用系统。

    • 然后,在 SQL处理层 进行 自主存取控制和强制存取控制,进一步可以进行推理控制

    • 还可以对 用户访问行为和系统关键操作进行审计 ,对 异常用户行为进行简单入侵检测

      https://i-blog.csdnimg.cn/direct/868bb6c2d25c45b69614dcc53ed1c956.png

4.2.1 用户身份鉴别

  • 用户身份鉴别 (Identification & Authentication) 系统提供的最外层安全保护措施
  • 用户身份鉴别的方法
    • 静态口令鉴别:静态口令一般由用户自己设定,这些口令是静态不变的
    • 动态口令鉴别口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法
    • 生物特征鉴别:通过生物特征进行认证的技术,生物特征如指纹、虹膜和掌纹等
    • 智能卡鉴别:智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能

4.2.2 存取控制

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

  • 常用存取控制方法

    • 自主存取控制(Discretionary Access Control ,简称DAC)
      • 用户对不同的数据对象有不同的存取权限
      • 不同的用户对同一对象也有不同的权限
      • 用户还可将其拥有的存取权限转授给其他用户

    你有一个文件夹,里面放着一些文件。你可以决定谁可以看这些文件,谁可以修改它们。比如,你可以让你的朋友A只能看文件,而让朋友B既能看又能修改。你还可以把你的权限转给朋友C,让他也能看或修改文件。这就是自主存取控制(DAC),你作为文件的主人,可以自由决定谁有什么权限。

    DAC :你作为主人,可以自由决定谁可以看或修改你的文件。

    • 强制存取控制(Mandatory Access Control,简称 MAC)
      • 每一个数据对象被标以一定的密级
      • 每一个用户也被授予某一个级别的许可证
      • 对于任意一个对象,只有具有合法许可证的用户才可以存取

    你和你的朋友们在一个军队或政府机构工作。每个文件都有一个保密级别,比如“机密”或“绝密”。每个人也有一个安全级别,比如“普通员工”或“高级官员”。只有你的安全级别足够高,才能看或修改相应保密级别的文件。你不能随便把权限给别人,因为这是由系统或上级强制规定的。这就是强制存取控制(MAC),权限是由系统或规则强制管理的,你不能随意更改。

    MAC :文件的访问权限是由系统或规则强制规定的,你不能随意更改。

4.2.3 自主存取控制方法 DAC

  • 定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些类型的操作, 定义存取权限称为授权
  • 通过 SQL 的 GRANT 语句和 REVOKE 语句实现

4.2.4 授权:授予与回收

1.GRANT

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

 GRANT <权限>[,<权限>]... 
 ON <对象类型> <对象名>[,<对象类型> <对象名>]…
 TO <用户>[,<用户>]...
 [WITH GRANT OPTION];
  • 发出GRANT:数据库管理员,数据库对象创建者(即属主Owner),拥有该权限的用户

  • 按受权限的用户 :一个或多个具体用户,PUBLIC(即全体用户)

  • WITH GRANT OPTION 子句:

    指定:可以再授予

    没有指定:不能传播

     [例4.6] GRANT INSERT 
                 ON TABLE SC 
                 TO U6
                 WITH GRANT OPTION;
          同样,U6还可以将此权限授予U7:
     [例4.7] GRANT INSERT 
    	         ON TABLE SC 
                 TO U7;
          但U7不能再传播此权限。
  • 不允许循环授权

    https://i-blog.csdnimg.cn/direct/c68245605c3b4ca3b6109687c8b0b0bb.png

2.REVOKE

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

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

3.小结:SQL灵活的授权机制

角色权限描述操作
数据库管理员拥有 所有对象 的所有权限根据实际情况将不同的权限授予不同的用户
用户拥有 自己建立的对象 的全部操作权限可以使用 GRANT 将权限授予其他用户
被授权的用户如果具有“继续授权”的许可,可以将获得的权限再授予其他用户可以使用 GRANT 继续授权,或使用 REVOKE 收回权限(如果拥有相应权限)

4.创建数据库模式的权限

数据库管理员在 创建用户 时实现

 CREATE  USER  <username> 
 [WITH][DBA|RESOURCE|CONNECT];
  • CREATE USER语句格式说明
    • 只有系统的 超级用户 才有权创建一个新的数据库用户

    • 新创建的数据库用户有三种权限: CONNECT、RESOURCE和DBA

      以下是根据你提供的信息整理的表格,总结了新创建的数据库用户的三种权限( CONNECTRESOURCEDBA )及其具体能力:

权限能力描述限制
CONNECT默认权限允许用户登录数据库- 不能创建新用户 - 不能创建模式 - 不能创建基本表
RESOURCE允许用户创建基本表和视图 ,并成为所创建对象的属主- 不能创建模式 - 不能创建新用户
DBA超级用户权限 ,可以创建新用户、创建模式、创建基本表和视图等, 拥有所有对象的权限- 无限制 - 可以将权限授予一般用户

4.2.5 数据库角色

  • 数据库角色 :被命名的一组与数据库操作相关的权限
    • 角色是权限的集合
    • 可以为一组具有相同权限的用户创建一个角色
    • 简化授权的过程
命令定义
CREATE USER创建一个数据库用户,用户可以直接登录数据库并执行操作。
CREATE ROLE创建一个角色,角色是一组权限的集合,不能直接登录数据库, 但可以分配给用户

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)仅当主体的许可证级别小于或等于客体的密级时,该主体才能 相应的客体

    如果文件是“机密”级别,那么只有“机密”级别或更低级别(如“普通”)的人才能修改。

    如果你是“绝密”级别的人,就不能修改“机密”文件,因为你的级别太高了。

    为什么这样规定?

    这是为了防止高级别的人不小心或故意修改低级别的文件,导致信息泄露或错误。

    总结:

    “你想改文件,你的级别不能太高。”

  • 实现强制存取控制时要首先实现自主存取控制

    原因:较高安全性级别提供的安全保护要包含较低级别的所有保护

    https://i-blog.csdnimg.cn/direct/aeaf84693d6943ef97f1905cb4cdd1de.png

    先进行自主存取控制检查,通过自主存取控制检查的数据对象再由系统进行强制存取控制检查,只有通过强制存取控制检查的数据对象方可存取。

4.3 视图机制

  • 把要保密的数据对无权存取这些数据的用户隐藏起来 ,对数据提供一定程度的安全保护
  • 间接地实现支持存取谓词的用户权限定义

4.4 审计(Audit)

  • 什么是审计
    • 启用一个专用的审计日志(Audit Log): 将用户对数据库的所有操作记录在上面
    • 审计员利用审计日志,监控数据库中的各种行为,找出非法存取数据的人、时间和内容

1.审计事件

  • 服务器事件:审计数据库服务器发生的事件
  • 系统权限:对系统拥有的结构或模式对象进行操作的审计,要求该操作的权限是通过系统权限获得的
  • 语句事件:对SQL语句,如DDL、DML、DQL及DCL语句的审计
  • 模式对象事件:对特定模式对象上进行的SELECT或DML操作的审计

3. AUDIT语句和NOAUDIT语句

AUDIT语句:设置审计功能

NOAUDIT语句:取消审计功能

4. 用户级审计和系统级审计

  • 用户级审计 是普通用户用来保护自己数据的工具。
  • 系统级审计 是管理员用来保护整个数据库系统的工具。

简单对比

类型设置人审计范围目的
用户级审计普通用户用户自己创建的表、视图等对象上的操作保护用户自己的数据
系统级审计数据库管理员(DBA)登录、权限分配、数据库级别操作等保护整个数据库系统的安全

4.5 数据加密

  • 数据加密:防止数据库中数据在存储和传输中失密的有效手段

  • 加密的基本思想:根据一定的算法将原始数据—明文(Plain text)变换为不可直接识别的格式­—密文(Cipher text)

  • 加密方法:存储加密和传输加密

    • 存储加密
      • 透明存储加密

        内核级加密保护方式,对用户完全透明

        将数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密

        数据库的应用程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可

        内核级加密方法: 性能较好,安全完备性较高

      • 非透明存储加密 :通过多个加密函数实现

    • 传输加密
      • 链路加密 :在链路层进行加密

        传输信息由报头和报文两部分组成

        报文和报头均加密

      • 端到端加密

        在发送端加密,接收端解密

        只加密报文不加密报头

        所需密码设备数量相对较少,容易被非法监听者发现并从中获取敏感信息

4.6 其他安全性保护

  • 推理控制:处理强制存取控制未解决的问题

  • 避免用户利用能够访问的数据推知更高密级的数据

  • 常用方法

    • 基于函数依赖的推理控制
    • 基于敏感关联的推理控制
  • 隐蔽信道:处理强制存取控制未解决的问题