安全性保护 (security)

  • 防止非法使用数据库
    • 要求用户通过规定的访问途径
    • 要求按照规定的访问规则
Term
安全数据库(可信数据库) 适应网络环境下安全要求级别的数据库
可信计算基(TCB) 为实现数据库安全所采用的所有实施策略与机制的集合
主体 数据的访问者
客体 数据库中的数据
身份标识与鉴别 每个主体标识自己的标识符和访问口令
自主访问控制(DAC) 基于存取矩阵(HRU)的安全控制模型
存取权限
强制访问控制(MAC) 通过无法回避的存取限制来防止各种攻击
数据完整性 防止非法插入,删除,修改等影响数据完整性的操作
隐蔽通道 非正规的,不受 TCB 控制的访问通道
审计 跟踪用户对数据的访问操作
访问监控器 独立的机构,TCB 在网络中的实现
  • 安全标准
    • 1985 TCSEC
    • 国际标准(ISO 15408) CC V2.1
    • 国标:GB 17859-1999 计算机系统安全保护等级划分
      • 第一级:用户自主保护级 (C1)
        • 自主访问控制 + 身份鉴别 + 数据完整性
      • 第二级:系统审计保护级 (C2)
        • + 客体重用 + 审计
      • 第三级:安全标记保护级 (B1)
        • + 强制访问控制 + 标记
      • 第四级:结构化保护级 (B2)
        • + 隐蔽信道分析 + 可信路径
      • 第五级:访问验证保护级 (B3)
        • + 可信恢复
  • SQL'92 C1
    • 自主访问控制:(用户,操作对象,操作权限)
      • 操作权限:SELECT, INSERT, DELETE, UPDATE, REFERENCE, EXECUTE, USAGE
      • 操作对象:表,属性,域,函数
      • 授权语句 GRANT <操作权限列表> ON <操作对象> TO <用户名列表> [OPTION]
      • 回收语句 REVOKE <操作权限列表> ON <操作对象> FROM <用户名列表> [RESTRICT|CASCADE]

完整性保护 (integrity)

  • 数据的正确性和一致性
    • 正确性:数据的有效性,有意义
    • 一致性:在多用户并发访问数据库的情况下,保证对数据的更新不会出现与实际不一致的情况
  • 完整性规则
    • 实体完整性规则:在一个基表的主关键字中,属性取值不能为空
    • 参照完整性
      • 引用:$R$ 中有属性集与另一个关系的主关键字对应,则 $R$ 引用 $S$ 中的元组
      • $R$ 中每个元组在外关键字上不能引用不存在的实体
    • 用户自定义的完整性
  • 完整性约束规则
    • 设置 CONSTRAINT <约束名> <完整性约束子句>
    • 检查
    • 处理
  • 外键约束
    • Cascade: 同步做连带删除/更新
    • Restrict: 拒绝对被引用表的删除/更新操作
    • Set Null: 自动设为空
  • 属性级约束(域约束)
{ NOT NULL 
| DEFAULT {default_constant|NULL}
| [ CONSTRAINT constraint_name ]
      UNIQUE
    | PRIMARY KEY
    | CHECK ( search_condition )
    | REFERENCES table_name [(column_name)]
    [ ON DELETE CASCADE | RESTRICT | SET NULL ]
    [ ON UPDATE CASCADE | RESTRICT | SET NULL ] }
  • 元组级约束(表约束)
[ CONSTRAINT constraint_name ]
{ UNIQUE ( colname { , colname ... } )
| PRIMARY KEY ( colname { , colname ... } )
| CHECK ( search_condition )
| FOREIGN KEY ( colname { , colname ... } )
  REFERENCES table_name [ ( colname { ,colname... } ) ]
[ ON DELETE CASCADE | RESTRICT | SET NULL ]
[ ON UPDATE CASCADE | RESTRICT | SET NULL ] }
  • 全局约束(assertion)
CREATE ASSERTION  <name>  CHECK( <condition> )
DROP   ASSERTION  <assertion-name-list>
  • 触发器
    • 触发事件(自定义)
    • 结果事件(自定义)
    • 触发过程
CREATE TRIGGER trigger_name { BEFORE | AFTER }
    { INSERT | DELETE | UPDATE [ OF colname {, colname ... }]} ON table_name 
    [ REFERENCING {
        OLD [ ROW ] [ AS ] old_row_corr_name
      | NEW [ ROW ] [ AS ] new_row_corr_name
      | OLD TABLE [ AS ] old_table_corr_name
      | NEW TABLE [ AS ] new_table_corr_name
      } ]
    
    [ FOR EACH ROW | FOR EACH STATEMENT ]
    [ WHEN ( search_condition ) ]
    { statement | BEGIN ATOMIC statement; { statement; ... } END }

DROP TRIGGER trigger_name