Java教程

【学习笔记】数据库系统原理 第四&五章 数据库的安全性与完整性

本文主要是介绍【学习笔记】数据库系统原理 第四&五章 数据库的安全性与完整性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

以下内容为参考课件和《数据库系统概论》(第5版,王珊等著)的个人整理,若有错误欢迎指出

第四&五章 数据库的安全性与完整性

文章目录

    • 第四&五章 数据库的安全性与完整性
      • 一、数据库的安全性
        • 1、安全性定义
        • 2、安全威胁的分类
        • 3、安全性控制
        • 4、统计数据库的安全性
      • 二、数据库的完整性
        • 1、完整性定义
        • 2、完整性约束
        • 3、完整性约束的分类
        • 4、完整性控制
        • 5、实现完整性约束

一、数据库的安全性

1、安全性定义

防止不合法的使用造成数据的泄露、更改和破坏。它包括向授权用户提供可靠的信息服务和拒绝非法访问请求,保证数据的可用性、完整性和一致性。

不安全因素主要来自于非授权用户的恶意存取破坏、敏感信息泄露和安全环境的脆弱性。

2、安全威胁的分类

  • 偶然接触和修改数据(意外事故、硬软件故障等)
  • 蓄意的侵犯和攻击(滥用权力、蛮力破坏、病毒等)

3、安全性控制

(1)分类

  • 外部安全控制:解决内部安全控制的不足

    • 实体安全控制(设置安全区域等)
    • 人员、组织安全控制(人员考察、责任追究等)
    • 过程安全控制(建立访问控制规则、管理制度等)
  • 内部安全控制:由计算机系统的软硬件实现
    请添加图片描述
    请添加图片描述

(2)数据库自身的安全机制

  • 用户标识和鉴别

    最外层安全保护措施。即提供用户标识(用户名+标识号UID),系统会记录合法用户的标识。鉴别方式包括静态口令、动态口令、生物特征、智能卡等。

  • 存取控制

    根据不同用户给不同的存取权限。存取控制机制主要包括定义用户权限(存在数据字典——系统表)和合法权限检查两个部分。方法分为:

    • 自主存取控制(DAC)

      用户权限由数据库对象(模式、表、视图等)和操作类型(创建、查询、插入等)两个要素组成。
      请添加图片描述
      创建一个用户后,需要被授权,这些权限可分为用户级权限(DBMA授予,与具体关系无关,是与数据库相关的)和关系级权限(DBMA或拥有者授予的与关系或视图相关的权限)。为了方便授权,数据库支持角色(一组权限的集合)和用户组(一组具有相同特性用户的集合)。

      下面给出sql语句,首先是用户级权限的授权:

      -- sql 用户级权限 授权语句,public是全部用户
      -- With Grant Option:允许被授权用户将权限授予他人
      -- 可以把权限或角色授给另一个角色,相当于加到权限集合当中
      Grant <用户级权限>|<角色> [{,<用户级权限>|<角色>}]
          To <用户名>|<角色>|public [{,<用户名>|<角色>}]
          [With Grant Option]
          
      -- 收回权限
      Revoke <用户级权限>|<角色> [{,<用户级权限>|<角色>}]
          From <用户名>|<角色>|public [{,<用户名>|<角色>}]
      
      

      关系级权限授权(类似):

      -- sql 关系级权限 授权语句,all表示该表/视图的全部权限
      -- 可以控制列级的权限,而这也可以用视图完成
      Grant ALL| <权限> [{,<权限>}]
             On <表名> | <视图名> [{,<表名> | <视图名>}]
             To {<用户> [{, <用户>}] | public}
             [With Grant Option]
      
      -- 收回权限
      Revoke ALL|<表级权限> [{,<表级权限>}] 
        On <表名>|<视图名> [{,<表名> | <视图名>}] 
        From {<用户>[{,<用户>}]|PUBLIC}
      

      自主存取控制的特点就是用户可以自主决定把自己的权限授予他人,甚至存在多重授权(A授权B,B授权C,若B权限被收回,但C仍有权限),因此有不安全隐患。

    • 强制存取控制(MAC)

      定义:主体是系统中的活动实体,包括所有用户及其进程。客体是系统中被动实体,受主体操纵,包括文件、基本表等。

      MAC中对所有主体和客体指定一个敏感度标记(于主体称为许可证级别,于客体称为密级)。唯有许可证级别大于等于密级时,允许读操作;级别相等时允许写操作。

      强制存取控制的特点是密级与数据绑定,不受普通用户操控,因此更安全。

  • 审计

    把用户的所有操作记录在审计日志。是一种事后追责措施。

  • 数据加密

    防止数据在存储和传输中失密的邮箱手段。

4、统计数据库的安全性

数据分为两类:微数据,即现实描述,不允许访问;统计或综合数据,即对微数据进行综合处理得到的结果,可以提供给用户。

统计数据库的安全性是防止用户通过综合结果推导出微数据(比如相关信息只有1条,就直接知道了)。可以采用以下方法:对统计结果大小加以控制,禁止在相同元组集合上重复执行一系列统计查询,在统计查询结果中加入噪声。

二、数据库的完整性

1、完整性定义

数据库的完整性是指数据的正确性(合法类型、取值)和相容性(表示同一个事实的数据应该相同)

2、完整性约束

施加在数据库数据之上的语义约束条件称为数据库完整性约束条件。

3、完整性约束的分类

约束可以是对列、元组或关系

(1)静态约束

即对数据库的确定状态的约束。包括固有约束(数据模型本身的约束,如关系的属性不可以是复合属性)、隐含约束(数据模式的约束,如实体完整性约束,即主码唯一且不为空)、显式约束(除了前两者之外的、需要显式定义的)。

(2)动态约束

数据库状态转变时新旧值之间的约束。比如动态列级约束(年龄的修改只能增不能减)、动态关系约束(转账后两用户的钱总额不变)。

4、完整性控制

完整性控制机制包括定义功能、检查功能和违约响应。

检查时机分为立即执行约束和延迟执行约束(后者是用户事物执行完毕后执行)。

一条完整性规则可以用一个五元组 ( D , O , A , C , P ) (D,O,A,C,P) (D,O,A,C,P)来描述,其中:

  • D D D(Data)约束所作用的数据对象。

  • O O O(Operation)触发完整性检查的数据库操作,即当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查。

  • A A A(Assertion)数据对象必须满足的断言或语义约束。

  • C C C(Condition)A作用的数据对象值的谓词。

    具体例子:当对职业为学生的年龄修改时要求小于26,那么D就是年龄(属性),O为修改,A为年龄小于26,C为职业=学生。

  • P P P(Procedure)违反完整性规则时触发的过程。一般是拒绝操作。

5、实现完整性约束

固有约束在DBMS实现时已规定。

隐含约束可以通过DDL语句在定义数据对象时实现(比如定义表时加unique等)。在定义时,还可以使用Constraint <完整性约束名> <完整性约束条件>的方式定义,命名方便对于一条约束的删改。此外,也可以创造域(Create Domain)并加上约束,这样取值为该域的属性的值都会满足约束。

而显式完整性约束有以下几种实现方式:

  • 过程

    由程序员编写过程(procedure)。但是这意味着需要为每个约束写一个验证过程(一定要涉及所有约束),而且需要调用,工作量大。

  • 断言

    需要DBMS提供断言说明语言,如Create Assertion <断言名> <Check语句>。当数据库涉及断言中相关关系的操作时,就会执行检查。但如果断言非常复杂,那么开销会很大。

  • 触发器

    触发器是用户定义在关系表上的一类由事件驱动的特殊过程。任何操作均有服务器自动激活响应的触发器,便于实施更复杂的检查。

    -- 触发事件:insert等语句(多个可用Or连接),还可以是 ... of <出发列, ...>
    -- Row|Statement:行级触法(每个元组执行时均触发)| 语句级触发(执行该语句触发一次)
    -- Referencing New | Old:把改变后、改变前的值当成一个变量,有时候需要在触发条件中使用
    -- 触发条件是违反规则的条件
    -- 触发动作体 触发后执行的语句
    Create Trigger <触发器名字>
            Before|After <触发事件> On <表名>
            Referencing New | Old Row As <变量>
            For Each Row|Statement 
            When <触发条件>
    		<触发动作体>
    

    不同数据库支持的触发器功能、语法不一致,使用时最好参照所用数据库的手册。

至此,数据库的基础知识已基本学习完毕,下一章将进入数据库的设计与开发。

这篇关于【学习笔记】数据库系统原理 第四&五章 数据库的安全性与完整性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!