『database-3』secruity control

数据库保护

一、数据库安全性控制

  • 安全性含义:防止不合法使用导致的数据泄露更改破坏

    • 向授权用户提供可靠服务
    • 拒绝对数据的非授权访问请求
  • 数据库系统的安全性模型:

  • 用户标识与鉴别:系统最外层的安全保护措施

    • 标识:系统采取一定方式标识其用户或应用程序的名字或身份

    • 认证:用户或应用程序登录时判断是否为合法的授权用户

      注意:标识常使用“用户名”,认证常使用“口令

  • 存取控制:合法用户可以访问、非法用户不能访问

    • 用户权限定义:将用户权限记录定义在数据字典中,形成安全性规则或授权规则

    • 合法权限检查:根据数据字典中的安全规则,对用户的操作请求进行合法权限检查,决定是否接受用户请求


    • 自主存取控制(DAC):用户可以将拥有的权限转授给其他用户,用户权限包含数据对象操作类型

      • 数据对象:分为 模式 (三级模式)+ 数据(表 + 属性列)
      • 操作类型:包括 建立 + 修改 + 检索(模式)、检索 + 插入 + 删除 + 修改(数据)

      注意:对用户的授权应包括 用户名 + 数据对象名 + 允许的操作类型

      • 角色:一组相关权限的集合,分配权限 \(\Leftrightarrow\) 授予角色
      • SQL的数据安全性控制:包括GRANTREVOKE语句
    • 强制存取控制(MAC):每个用户和数据对象均标记一定的密级

      • 主体与客体:主体包括实际用户 + 用户进程;客体包括用户操纵的被动实体(如基本表等)
      • 敏感度标记:主体称作许可证级别,客体称作密级
      • 对客体的存取规则:
        • 许可证级别 \(\ge\) 密级:主体允许读取相应客体(但不能写)
        • 许可证级别 = 密级:主体允许改写相应客体

    • 视图机制:为每个用户定义不同的视图,可将对数据的访问限制在一定范围中

    • 审计:将用户对数据库的所有操作自动记录在审计日志,支持DBA重现数据库操作,找出非法记录

    • 数据加密:使用一定的算法将原始数据转变为不可识别的密文


二、数据库完整性控制

  • 完整性内涵:数据的正确性和相容性(数据库对真实世界的表征)

    • 正确性:数据类型合法 + 数据处在取值范围
    • 相容性:表示同一事实的两个数据应该相同

    注意:安全性防范非法用户or非法操作;完整性防范不合语义的数据

  • 完整性约束条件:施加在数据库上的语义约束条件,作用对象包括 列、元组、关系

    • 实体完整性:元组的完整性约束;SQL中使用PRIMARY KEY
    • 参照完整性:关系的完整性约束;SQL中使用FOREIGN KEY
    • 用户自定义完整性:对列or元组的完整性约束;SQL中使用UNIQUENOT NULLCHECK
  • 静态约束:

    • 静态列级约束:对列取值域的说明,如数据类型、取值范围
    • 静态元组约束:规定元组中各列间的约束关系
    • 静态关系约束:各元组或各关系间的联系与约束,如实体完整性约束参照完整性约束等
  • 动态约束:

    • 动态列级约束:修改列定义or列值时应满足的约束条件
    • 动态元组约束:修改元组值时需要满足的约束条件
    • 动态关系约束:关系变化前后状态上的限制条件

    注意:静态约束反映数据库在确定状态下的约束条件;动态约束反映数据库状态变迁的约束条件


  • 完整性控制的功能实现:

    • 定义功能:提供定义完整性约束条件的机制
    • 检查功能:检查用户请求是否违背完整性约束条件
    • 违约响应:在违背了完整性约束的情况下,采取一定措施保证数据完整性
  • 完整性检查的时机:

    • 立即执行约束:在一条语句执行后立即进行完整性约束
    • 延迟执行约束:在整个用户事务执行完毕后,再进行完整性约束的检查
  • 完整性规则的表示:五元组 (D, O, A, C, P)

    • D(数据):约束作用的数据对象
    • O(操作):触发完整性检查的数据操作
    • A(断言):数据对象必须满足的断言or语义约束
    • C(谓词):若对数据对象施加断言A,则该对象必须满足的谓词条件
    • P(过程):违反完整性约束规则时触发的过程
  • SQL中的完整性约束:

    • CREATE TABLE 语句:定义列级完整性约束、表级完整性约束

    • CREATE ASSERTION <断言名> CHECK(约束条件)

    • 触发器:用户对表的更新操作,自动激活相应触发器执行完整性约束(事件驱动)

      • 表名:触发器只能定义在基本表上,不能定义在视图上

      • 触发时机:BEFORE表示在执行触发事件前激活触发器,AFTER则相反

      • 触发事件:可以是 INSERT、UPDATE、DELETE 或其组合,也可以指定操作列名 如 UPDATE OF (若干触发列)

        • 触发器类型:规定触发动作执行的间隔尺寸,对于每条SQL语句

          • ROW:每操作一个元组,就执行一次触发动作

          • STATEMENT:执行该SQL语句后,才执行一次触发动作

            注意:若没有FOR语句,则可以引用 OLDTABLE(表中原先内容)和 NEWTABLE(表中变化后的部分)

      • 触发条件:WHEN后的语句为真,触发动作才会执行(缺省则触发器激活后立即进行)

      • 触发动作体(匿名SQL块):触发的SQL执行块;若触发动作体执行失败,触发事件也会失效
        注意:对于行级触发器,可以使用NEW/OLD引用更新或插入后的新值更新或删除前的旧值


『database-3』secruity control
http://larry0454.github.io/2023/10/10/database/secruity-control/
Author
WangLe
Posted on
October 10, 2023
Licensed under