资源描述
仲 恺 数 据 库 原 理 及 应 用Principles and Applications of the Database 第 6章 数 据 库 安 全 性 和 完 整 性仲 恺 农 业 工 程 学 院 计 算 机 科 学 与 工 程 学 院 第 6章 数 据 库 安 全 性 和 完 整 性 v本 章 导 读 本 章 主 要 介 绍 数 据 库 的 安 全 性 和 完 整 性 , 包 括数 据 库 安 全 性 的 定 义 , 数 据 库 安 全 性 控 制 采 取的 一 些 措 施 , 数 据 库 完 整 性 的 定 义 , 完 整 性 约束 条 件 的 类 型 , 完 整 性 控 制 机 制 , 并 用 SQL语句 给 出 了 如 何 描 述 授 权 、 角 色 、 建 立 视 图 、 约束 以 及 触 发 器 的 方 式 等 。 第 6章 数 据 库 安 全 性 和 完 整 性v重 点 : 1 安 全 性 的 基 本 概 念 2 完 整 性 的 基 本 概 念v难 点 : 1 域 完 整 性 控 制 方 法 2 实 体 完 整 性 控 制 方 法 3. 参 照 完 整 性 控 制 方 法 第 6章 数 据 库 安 全 性 和 完 整 性v本 章 要 点 安 全 性 和 完 整 性 的 基 本 概 念 数 据 库 系 统 的 6种 安 全 性 技 术 域 完 整 性 控 制 方 法 实 体 完 整 性 控 制 方 法 参 照 完 整 性 控 制 方 法 第 6章 数 据 库 安 全 性 和 完 整 性6.1 概 述6.2 数 据 库 的 安 全 性6.3 数 据 库 的 完 整 性6.4 SQL的 完 整 性 控 制本 章 小 结 6.1 概 述 数 据 库 的 数 据 保 护 主 要 包 括 数 据 库 的 安 全 性 和 完整 性 保 护 机 制 。 安 全 性 : 就 是 要 保 证 数 据 库 中 数 据 的 安 全 , 防 止未 授 权 用 户 随 意 修 改 数 据 库 中 的 数 据 , 确 保 数 据的 安 全 。完 整 性 : 是 数 据 库 的 一 个 重 要 特 征 , 也 是 保 证 数据 库 中 的 数 据 切 实 有 效 、 防 止 错 误 、 实 现 商 业 规则 的 一 种 重 要 机 制 。 6.1 概 述防 范 对 象 :安 全 性 的 防 范 对 象 :非 法 用 户 和 非 法 操 作完 整 性 的 防 范 对 象 :是 不 合 法 的 语 义 数 据 第 6章 数 据 库 安 全 性 和 完 整 性6.1 概 述6.2 数 据 库 的 安 全 性6.3 数 据 库 的 完 整 性6.4 SQL的 完 整 性 控 制本 章 小 结 6.2 数 据 库 的 安 全 性 安 全 性 问 题 是 计 算 机 系 统 中 普 遍 存 在 的 一 个 问 题 ,而 在 数 据 库 系 统 中 显 得 尤 为 突 出 。 原 因 : 数 据 库 系 统 中 大 量 数 据 集 中 存 放 , 而 且 为 许多 最 终 用 户 直 接 共 享 。 数 据 库 系 统 建 立 在 操 作 系 统 之上 , 而 操 作 系 统 是 计 算 机 系 统 的 核 心 , 因 此 数 据 库 系统 的 安 全 性 与 计 算 机 系 统 的 安 全 性 息 息 相 关 。 6.2 数 据 库 的 安 全 性 在 一 般 计 算 机 系 统 中 , 安 全 措 施 是 一 层 一 层 设 置 的 ,下 图 是 常 见 的 计 算 机 系 统 安 全 模 型 。 用 户 DBMS OS DB用 户 标 识和 鉴 别 存 取 控 制 操 作 系 统安 全 保 护 密 码 存 储 6.2 数 据 库 的 安 全 性 6.2.1 用 户 标 识 与 鉴 别 6.2.2 存 取 控 制 6.2.3 视 图 6.2.4 数 据 加 密 6.2.5 跟 踪 审 计 6.2.6 统 计 数 据 库 的 安 全 6.2.1 用 户 标 识 与 鉴 别 用 户 标 识 与 鉴 别 是 系 统 提 供 的 最 外 层 安 全 保 护措 施 。 当 用 户 进 入 数 据 库 系 统 时 , 需 要 提 供 用 户 的 标识 , 系 统 根 据 标 识 鉴 别 此 用 户 是 不 是 合 法 用 户 :v对 于 合 法 的 用 户 , 进 一 步 开 放 数 据 库 的 访 问 权 限 ;v对 于 非 法 用 户 , 则 拒 绝 该 用 户 对 数 据 库 进 行 存 取 操作 。 6.2.1 用 户 标 识 与 鉴 别用 户 标 识 与 鉴 别 的 方 法 比 较 多 , 常 用 的 有 下 几 种 : 1 输 入 用 户 名 标 识 合 法 身 份2 回 答 用 户 口 令 标 识 身 份3 通 过 回 答 随 机 数 的 运 算 结 果 标 识 合 法 身 份4 通 过 个 人 特 征 鉴 别 标 识 合 法 身 份 6.2 数 据 库 的 安 全 性 6.2.1 用 户 标 识 与 鉴 别 6.2.2 存 取 控 制 6.2.3 视 图 6.2.4 数 据 加 密 6.2.5 跟 踪 审 计 6.2.6 统 计 数 据 库 的 安 全 6.2.2 存 取 控 制 数 据 库 安 全 性 所 关 心 的 主 要 是 DBMS的 存 取控 制 机 制 。 存 取 控 制 是 确 保 具 有 授 权 资 格 的 用 户访 问 数 据 库 的 权 限 , 同 时 使 得 所 有 未 被 授 权 的 人员 无 法 访 问 数 据 库 的 机 制 。 1 存 取 控 制 机 制 的 构 成 部 分( 1) 定 义 用 户 权 限 : 用 户 权 限 是 指 用 户 对 于 数 据 对 象能 够 执 行 的 操 作 种 类 。 进 行 用 户 权 限 定 义 , 系 统 必 须 提 供有 关 用 户 定 义 权 限 的 语 言 。( 2) 系 统 进 行 权 限 检 查 : 每 当 用 户 发 出 存 取 数 据 库的 操 作 请 求 后 , DBMS首 先 查 找 数 据 字 典 , 进 行 合 法 权 限 检查 , 如 果 用 户 的 操 作 请 求 没 有 超 出 其 数 据 操 作 权 限 , 则 准 予 执 行 其 数 据 操 作 ; 否 则 , 拒 绝 其 执 行 此 操 作 。 6.2.2 存 取 控 制2 存 取 机 制 的 类 别( 1) 自 主 存 取 控 制 : 在 自 主 存 取 控 制 方 法 中 , 用 户 对于 不 同 的 对 象 有 不 同 的 存 取 权 限 ; 不 同 的 用 户 对 同 一 对 象的 存 取 权 限 也 不 同 ; 用 户 也 可 以 将 自 己 拥 有 的 权 限 传 授 给其 他 用 户 。( 2) 强 制 存 取 控 制 : 在 强 制 存 取 控 制 中 , 每 一 个 数据 对 象 被 标 以 一 定 的 密 级 ; 每 一 个 用 户 也 被 授 予 某 个 级 别的 访 问 许 可 证 ; 对 于 任 意 一 个 对 象 , 只 有 具 有 合 法 许 可 证的 用 户 才 可 以 存 取 。 与 自 主 存 取 控 制 相 比 , 强 制 存 取 控 制比 较 严 格 。 6.2.2 存 取 控 制3. 自 主 访 问 控 制 方 法( 1) 用 户 分 类 与 权 限 对 于 一 个 数 据 库 , 不 同 的 用 户 有 不 同 的 访 问 要 求 和使 用 权 限 。 一 般 可 以 将 数 据 库 的 用 户 分 为 四 类 :数 据 库 管 理 员数 据 库 对 象 的 属 主一 般 数 据 库 用 户公 共 用 户 6.2.2 存 取 控 制 数 据 库 管 理 员 (Database Administrator, DBA) 拥 有 支 配 整 个 数 据 库 资 源 的 特 权 , 对 数 据 库拥 有 最 大 的 特 权 , 因 而 也 对 数 据 库 负 有 特 别 的 责任 。 DBA特 权 命 令 包 括 给 各 个 独 立 的 帐 户 、 用 户 或者 用 户 组 授 予 特 权 和 回 收 特 权 , 以 及 把 某 个 适 当的 安 全 分 类 级 别 指 派 给 某 个 用 户 帐 户 。 6.2.2 存 取 控 制数 据 库 对 象 的 属 主 是 数 据 库 的 创 建 者 , 他 除 了 一 般 数 据 库 用 户 拥有 的 权 力 外 , 还 可 以 授 予 或 收 回 其 他 用 户 对 其 所 创建 的 数 据 库 的 存 取 权 。一 般 数 据 库 用 户 就 是 通 过 授 权 可 对 数 据 库 进 行 操 作 的 用 户 。 6.2.2 存 取 控 制公 共 用 户 是 为 了 方 便 共 享 数 据 操 作 而 设 置 的 , 它 代 表 全体 数 据 库 用 户 , 如 果 把 某 个 数 据 对 象 的 某 项 操 作 授权 给 公 共 用 户 , 则 一 个 合 法 的 数 据 库 用 户 都 能 进 行该 项 数 据 操 作 。 6.2.2 存 取 控 制 用 户 使 用 数 据 库 的 方 式 称 为 权 限 。 使 用 数 据库 的 权 限 分 为 二 类 : 访 问 数 据 特 权 和 修 改 数 据 库模 式 的 特 权 。访 问 数 据 特 权 包 括 :读 数 据 权 限 、 插 入 数 据 权 限 、 修 改 数 据 权 限 和 删 除 数据 权 限 。修 改 数 据 库 模 式 的 特 权 包 括 :创 建 和 删 除 索 引 的 索 引 权 限 , 创 建 新 表 的 资 源 权 限 ,允 许 修 改 表 结 构 的 修 改 权 限 , 允 许 撤 销 关 系 表 的 撤 销权 限 等 。 6.2.2 存 取 控 制( 2) SQL的 数 据 控 制 功 能 SQL对 自 主 存 取 控 制 提 供 了 支 持 , 其 DCL主 要 是GRANT( 授 权 ) 语 句 和 REVOKE( 收 权 ) 语 句 。 授 权 由 于 不 同 的 用 户 对 数 据 库 具 有 不 同 的 存 取 权 , 因此 为 了 保 证 用 户 只 能 访 问 他 有 权 存 取 的 数 据 , 必 须 对每 个 用 户 授 予 不 同 的 数 据 库 存 取 权 。 授 权 在 SQL中 , 授 权 语 句 有 两 种 : 授 予 权 限 语 句和 授 予 角 色 语 句 。 一 个 角 色 是 一 组 被 命 名 的 零 个 或 多 个 特 权 。 授 权一 个 角 色 给 一 个 用 户 , 则 允 许 该 用 户 使 用 被 授 权 的 角色 所 拥 有 的 每 一 个 特 权 。 用 户 与 角 色 之 间 存 在 多 对 多的 联 系 ; 一 个 用 户 允 许 被 授 予 多 个 角 色 使 用 , 同 一 个角 色 的 使 用 被 授 权 予 多 个 用 户 。 一 个 角 色 的 使 用 也 可以 被 授 权 予 另 一 个 角 色 。 授 予 权 限 语 句语 句 基 本 形 式 为 : GRANT 权 限 ON 数 据 对 象 TO 受 权 者 WITH GRANT OPTION 数 据 对 象 : : = 基 表 视 图 属 性 受 权 者 : : = PUBLIC 授 权 ID 语 义 : 将 某 作 用 在 指 定 操 作 对 象 上 的 操 作 权 限 , 限 授予 指 定 的 用 户 。 ( 即 数 据 库 对 象 的 访 问 权 限 的 管 理 ) 如 果 指 定 WITH GRANT OPTION子 句 , 则 获 得 某 种 权 限的 用 户 可 以 把 这 种 权 限 在 授 予 其 他 用 户 。 如 没 有 指 定该 子 句 , 获 得 授 权 的 用 户 将 不 能 传 播 权 限 (转 授 )。 授 予 权 限 语 句【 例 6-1】 在 数 据 库 XSBOOK中 , 将 表 STUDENT的SELECT操 作 权 限 授 予 所 有 的 用 户 。注 意 : PUBLIC是 一 个 特 殊 的 保 留 字 , 代 替 该 数 据 库 系统 的 全 体 用 户 。 对 于 大 部 分 可 以 公 开 的 数 据 , 可 以 一次 性 地 授 权 给 PUBLIC, 而 不 必 对 每 个 用 户 逐 个 授 权 。GRANT SELECT ON TABLE STUDENT TO PUBLIC; 授 予 权 限 语 句【 例 6-2】 在 数 据 库 XSBOOK中 , 将 表 STUDENT的 借 书 证号 、 姓 名 字 段 的 UPDATE权 限 授 予 给 liu。【 例 6-3】 将 对 表 STUDENT的 所 有 操 作 特 权 授 予 liu。GRANT UPDATE( 借 书 证 号 , 姓 名 )ON STUDENT TO liu;GRANT ALL PRIVILEGES ON TABLE STUDENT TO liu; 授 予 权 限 语 句【 例 6-4】 将 对 表 STUDENT中 借 书 证 号 和 专 业 名 的INSERT特 权 授 予 liu, 并 允 许 他 将 此 特 权 转 授 给其 他 用 户 。GRANT INSERT( 借 书 证 号 , 专 业 名 )ON STUDENT TO liu WITH GRANT OPTION; 授 予 角 色 语 句该 语 句 基 本 形 式 为 (oracle)GRANT 角 色 ID , 角 色 ID TO 受 权 者 WITH ADMIN OPTION该 语 句 将 一 个 或 多 个 角 色 的 使 用 授 予 ,若 有 WITH ADMIN OPTION, 则 受 权 者 可 将 此角 色 转 授 给 其 他 。 授 予 角 色 语 句 在 下 列 语 句 中 , Accounting_role, Import_role都 是己 建 立 的 角 色 。【 例 6-5】 将 角 色 Accounting _role和 Import _role授 予所 有 的 用 户 。GRANT Accounting _role, Import_role TO PUBLIC; 授 予 角 色 语 句【 例 6-6】 将 角 色 Accounting _role授 予 用 户 zhang,并 允 许 他 将 此 角 色 转 授 给 其 他 人 。GRANT Accounting _role TO zhang WITH ADMIN OPTION; v将 用 户 test加 入 至 角 色 managervExec sp_addrolemember manager,test v 用 户 Jean 拥 有 表 Plan_Data。 Jean 将 表 Plan_Data 的 SELECT 权 限 授 予 Accounting 角 色 ( 指 定 WITH GRANT OPTION 子 句 ) 。 用 户 Jill 是 Accounting 的 成 员 , 他 要 将 表 Plan_Data 上 的 SELECT 权 限 授 予 用 户 Jack, Jack 不 是 Accounting 的 成 员 。因 为 对 表 Plan_Data 用 GRANT 语 句 授 予 其 他 用 户 SELECT 权限 的 权 限 是 授 予 Accounting 角 色 而 不 是 显 式 地 授 予 Jill, 不 能 因为 已 授 予 Accounting 角 色 中 成 员 该 权 限 , 而 使 Jill 能 够 授 予 表的 权 限 。 Jill 必 须 用 AS 子 句 来 获 得 Accounting 角 色 的 授 予 权 限 。/* User Jean */GRANT SELECT ON Plan_Data TO Accounting WITH GRANT OPTION/* User Jill */GRANT SELECT ON Plan_Data TO Jack AS Accounting 6.2.2 存 取 控 制 当 用 户 将 某 些 权 限 授 给 其 他 用 户 后 , 有 时 还 需要 把 权 限 收 回 。 收 权 需 要 使 用 REVOKE语 句 。 收 回 权 限 的 REVOKE语 句 : 收 回 角 色 的 REVOKE语 句 : 收 回 权 限REVOKE 权 限 ON 数 据 对 象 FROM 受 权 者 , 受 权 者 REVOKE 角 色 ID FROM 受 权 者 , 受 权 者 6.2.2 存 取 控 制【 例 6-7】 将 liu对 STUDENT表 的 INSERT权 限 收 回 。 REVOKE INSERT ON STUDENT FROM liu 6.2.2 存 取 控 制 ( 3) 自 主 存 取 控 制 的 不 足 之 处 自 主 存 取 控 制 能 够 通 过 授 权 机 制 有 效 地 控 制 用 户对 敏 感 数 据 的 存 取 , 但 也 存 在 着 一 定 的 缺 陷 , 其 主 要问 题 是 系 统 对 权 限 的 授 予 状 况 无 法 进 行 有 效 的 控 制 ,因 而 可 能 造 成 数 据 的 无 意 泄 漏 。 但 是 , 强 制 存 取 控 制 方 法 可 以 有 效 地 解 决 这 一 问 题 。 6.2.2 存 取 控 制 所 谓 MAC是 指 系 统 为 保 证 更 高 程 度 的 安 全 性 ,它 不 是 用 户 能 直 接 感 知 或 进 行 控 制 的 。 MAC适 用 于那 些 对 数 据 有 严 格 而 固 定 密 级 分 类 的 部 门 , 例 如 军事 部 门 或 政 府 部 门 。4 强 制 存 取 控 制 方 法 ( MAC) 在 MAC中 , DBMS所 管 理 的 全 部 实 体 被 分 为 主 体和 客 体 两 大 类 。 6.2.2 存 取 控 制 主 体 系 统 中 的 活 动 实 体 , 既 包 括 DBMS所 管 理的 实 际 用 户 , 也 包 括 代 表 用 户 的 各 进 程 。 客 体 系 统 中 的 被 动 实 体 , 是 受 主 体 操 纵 的 , 包括 文 件 、 基 表 、 索 引 、 视 图 等 等 。 6.2.2 存 取 控 制 当 某 一 用 户 ( 或 一 主 体 ) 以 标 记 label注 册入 系 统 时 , 系 统 要 求 他 对 任 何 客 体 的 存 取 必 须 遵循 如 下 规 则 : ( 1) 仅 当 主 体 的 许 可 证 级 别 大 于 或 等 于 客 体 的 密 级时 , 该 主 体 才 能 读 取 相 应 的 客 体 ; ( 2) 仅 当 主 体 的 许 可 证 级 别 等 于 客 体 的 密 级 时 , 该主 体 才 能 写 相 应 的 客 体 。 6.2.2 存 取 控 制一 般 强 制 存 取 控 制 采 用 以 下 几 种 方 法 实 现 :( 1) 限 制 访 问 控 制( 2) 过 程 控 制( 3) 系 统 限 制 6.2 数 据 库 的 安 全 性 6.2.1 用 户 标 识 与 鉴 别 6.2.2 存 取 控 制 6.2.3 视 图 6.2.4 数 据 加 密 6.2.5 跟 踪 审 计 6.2.6 统 计 数 据 库 的 安 全 6.2.3 视 图 视 图 技 术 是 当 前 数 据 库 技 术 中 保 持 数 据 库 安 全 性的 重 要 手 段 之 一 。 通 过 为 不 同 的 用 户 定 义 不 同 的 视 图 ,可 以 将 要 保 密 的 数 据 对 无 权 存 取 的 用 户 隐 藏 起 来 , 从而 自 动 地 给 数 据 提 供 一 定 程 度 的 安 全 保 护 。 例 如 , 给某 用 户 定 义 了 一 个 只 读 视 图 , 并 且 这 个 视 图 的 数 据 来源 于 关 系 R, 则 此 用 户 只 能 读 R中 的 有 关 信 息 , 数 据 库中 一 切 其 他 信 息 对 他 都 是 隐 藏 的 。 6.2.3 视 图【 例 6-8】 允 许 一 个 用 户 查 询 学 生 表 STUDENT的 记录 , 但 是 只 允 许 他 查 询 计 算 机 专 业 学 生 的 情 况 。CREATE VIEW STUDENT_SUBJECT AS SELECT 借 书 证 号 , 姓 名 , 专 业 名 , 性 别 , 出 生 时间 , 借 书 数 FROM STUDENT WHERE 专 业 名 计 算 机 使 用 这 个 视 图 STUDENT_SUBJECT的 用 户 看 到 的 只 是 基本 表 STUDENT的 一 个 “ 水 平 子 集 ” , 或 称 行 子 集 。 6.2 数 据 库 的 安 全 性 6.2.1 用 户 标 识 与 鉴 别 6.2.2 存 取 控 制 6.2.3 视 图 6.2.4 数 据 加 密 6.2.5 跟 踪 审 计 6.2.6 统 计 数 据 库 的 安 全 6.2.4 数 据 加 密 数 据 加 密 技 术 是 防 止 数 据 库 中 数 据 在 存 储 或者 传 输 中 失 密 的 有 效 手 段 。 加 密 的 基 本 思 想 是 根 据 一 定 的 算 法 将 原 始 数据 ( 明 文 ) 变 换 成 不 可 直 接 识 别 的 格 式 ( 密 文 ) ,从 而 使 得 不 知 道 解 密 算 法 的 人 无 法 获 知 数 据 的 内容 。 这 样 可 以 保 证 只 有 掌 握 了 密 钥 的 用 户 才 能 访问 数 据 , 而 且 即 使 数 据 被 非 法 地 从 数 据 库 中 窃 取 ,或 者 在 数 据 传 输 过 程 中 被 截 取 , 窃 取 者 都 无 法 知道 密 码 数 据 的 含 义 。 6.2.4 数 据 加 密 数 据 加 密 的 主 要 方 法 有 两 种 :1 替 换 方 法该 方 法 使 用 密 钥 ( Encryption Key) 将 明 文 中 的 每一 个 字 符 转 换 为 密 文 中 的 字 符 。2 置 换 方 法该 方 法 仅 将 明 文 的 字 符 按 不 同 的 顺 序 重 新 排 列 。 6.2 数 据 库 的 安 全 性 6.2.1 用 户 标 识 与 鉴 别 6.2.2 存 取 控 制 6.2.3 视 图 6.2.4 数 据 加 密 6.2.5 跟 踪 审 计 6.2.6 统 计 数 据 库 的 安 全 6.2.5 跟 踪 审 计 跟 踪 审 计 ( Audit Trial) 是 一 种 监 视 措 施 , 数据 库 运 行 中 , DBMS跟 踪 用 户 对 一 些 敏 感 数 据 的 存取 活 动 , 把 用 户 对 数 据 库 的 操 作 自 动 记 录 下 来 放 入审 计 日 志 ( Audit Log) 中 , 有 许 多 DBMS的 跟 踪审 计 记 录 文 件 与 系 统 的 运 行 日 志 合 在 一 起 。 系 统 能利 用 这 些 审 计 跟 踪 的 信 息 , 重 现 导 致 数 据 库 现 状 的一 系 列 事 件 。 6.2.5 跟 踪 审 计 跟 踪 审 计 的 记 录 一 般 包 括 以 下 内 容 : 请 求 ( 源文 本 ) 、 操 作 类 型 ( 如 修 改 、 查 询 等 ) 、 操 作 终端 标 识 与 操 作 者 标 识 、 操 作 日 期 和 时 间 、 操 作 所涉 及 的 对 象 ( 表 、 视 图 、 记 录 、 属 性 等 ) 、 数 据的 前 映 象 和 后 映 象 。 DBMS提 供 相 应 的 语 句 供 施 加和 撤 销 跟 踪 审 计 之 用 。 6.2 数 据 库 的 安 全 性 6.2.1 用 户 标 识 与 鉴 别 6.2.2 存 取 控 制 6.2.3 视 图 6.2.4 数 据 加 密 6.2.5 跟 踪 审 计 6.2.6 统 计 数 据 库 的 安 全 6.2.6 统 计 数 据 库 的 安 全 统 计 数 据 库 是 一 种 特 殊 类 型 的 数 据 库 , 它 和一 般 的 数 据 库 相 比 , 有 很 多 共 同 点 , 但 是 也 有 许多 独 特 之 处 。 统 计 数 据 库 , 它 回 答 给 用 户 的 只 能 是 统 计 信息 。 如 国 家 的 人 口 统 计 数 据 库 、 经 济 统 计 数 据 库等 。 统 计 数 据 库 存 储 了 大 量 敏 感 的 数 据 , 但 只 给用 户 提 供 这 些 原 始 数 据 的 统 计 数 据 ( 如 平 均 值 、总 计 等 ) , 而 不 允 许 用 户 查 看 单 个 的 原 始 数 据 。 6.2.6 统 计 数 据 库 的 安 全 用 户 使 用 合 法 的 统 计 查 询 可 以 推 断 出 他 不 应 了 解的 数 据 。例 如 , 一 个 学 生 想 要 知 道 另 一 个 学 生 A的 成 绩 , 他可 以 通 过 查 询 包 含 A在 内 的 一 些 学 生 的 平 均 成 绩 ,然 后 对 于 上 述 学 生 集 合 P, 他 可 用 自 己 的 学 号 取 代 A后 得 集 合 P 的 平 均 成 绩 。 通 过 这 样 两 次 查 询 得 到的 平 均 成 绩 的 差 和 自 己 的 成 绩 , 就 可 以 推 断 出 学 生A的 成 绩 。 6.2.6 统 计 数 据 库 的 安 全 为 了 堵 塞 这 类 漏 洞 , 必 须 对 数 据 库 的 访 问 进行 推 断 控 制 。 现 在 常 用 的 方 法 有 数 据 扰 动 、 查 询控 制 和 历 史 相 关 控 制 等 。 这 些 方 法 虽 然 都 获 得 了应 用 , 取 得 了 很 好 的 效 果 , 但 是 迄 今 为 止 , 统 计数 据 库 的 安 全 问 题 尚 未 彻 底 解 决 。 第 6章 数 据 库 安 全 性 和 完 整 性6.1 概 述6.2 数 据 库 的 安 全 性6.3 数 据 库 的 完 整 性6.4 SQL的 完 整 性 控 制本 章 小 结 6.3 数 据 库 的 完 整 性 。 数 据 库 的 完 整 性 是 指 数 据 库 中 数 据 的 正 确 性 和相 容 性 , 即 为 了 防 止 数 据 库 中 存 在 不 符 合 语 义 的 数据 , 防 止 错 误 信 息 的 输 入 和 输 出 。例 如 :学 生 的 学 号 一 定 是 唯 一 的 , 学 号 的 长 度 是 13至 15个字 符 串 ; 学 生 的 年 龄 是 整 数 , 取 值 范 围 为 11 45;当 一 个 用 户 向 数 据 库 插 入 一 个 新 的 学 生 记 录 或 修 改一 个 学 生 的 数 据 时 必 须 满 足 这 些 条 件 。 6.3 数 据 库 的 完 整 性 数 据 库 的 完 整 性 保 证 了 真 实 反 映 现 实 世 界 , 凡是 已 经 失 真 的 数 据 都 可 以 说 其 完 整 性 受 到 了 破 坏 ,这 种 情 况 下 就 不 能 再 使 用 数 据 库 , 否 则 可 能 造 成 严重 的 后 果 。完 整 性 受 破 坏 的 常 见 原 因 :1 错 误 的 数 据2 错 误 的 更 新 操 作3 并 发 访 问4 各 种 硬 件 故 障5 人 为 的 破 坏 6.3 数 据 库 的 完 整 性 6.3.1 完 整 性 的 语 义 约 束 6.3.2 完 整 性 语 义 检 查 6.3.1 完 整 性 的 语 义 约 束 。 完 整 性 约 束 条 件 作 用 的 对 象 可 以 是 列 、 元 组 、 关 系三 种 。 列 约 束 : 主 要 是 列 类 型 、 取 值 范 围 、 精 度 、 排 序等 约 束 条 件元 组 约 束 : 是 元 组 中 各 个 字 段 间 的 联 系 的 约 束 。 关 系 的 约 束 : 是 若 干 元 组 间 、 关 系 集 合 上 以 及 关 系间 的 联 系 的 约 束 。 6.3.1 完 整 性 的 语 义 约 束 完 整 性 约 束 条 件 的 类 型 可 以 分 为 两 大 类 型 : 静 态 约 束 和 动 态 约 束 。 1 静 态 约 束 静 态 约 束 是 指 数 据 库 每 一 确 定 状 态 时 的 数 据 对象 所 应 满 足 的 约 束 条 件 , 它 是 反 映 数 据 库 状 态 合 理性 的 约 束 , 这 是 最 重 要 的 一 类 完 整 性 约 束 。 6.3.1 完 整 性 的 语 义 约 束根 据 约 束 作 用 的 对 象 的 不 同 , 又 可 分 为 下 面 三 种 : (1)静 态 列 约 束 对 一 个 列 的 取 值 域 等 的 说 明 或 限 制 , 这 是 最 常见 、 最 容 易 实 现 的 一 类 完 整 性 约 束 , 它 包 括 以 下 几 个方 面 : 对 数 据 类 型 的 约 束 , 例 如 , 数 据 的 类 型 、 长 度 、单 位 、 精 度 等 。 对 数 据 格 式 的 约 束 , 例 如 , 学 生 的 学 号 的 格 式 中前 四 位 表 示 入 学 年 份 , 中 间 三 位 为 院 号 +系 号 , 后 三位 为 班 级 号 +顺 序 编 号 。 6.3.1 完 整 性 的 语 义 约 束 对 取 值 范 围 或 取 值 集 合 的 约 束 , 例 如 , 大 学 本 科 学生 年 龄 范 围 的 取 值 范 围 为 11 45。 对 空 值 的 约 束 , 空 值 表 示 未 定 义 或 未 知 的 值 , 与 零值 和 空 格 不 同 。 有 的 列 允 许 空 值 , 有 的 不 允 许 ,例 如 , 规 定 学 生 的 姓 名 不 允 许 取 空 值 ; 学 号 成 绩可 以 为 空 值 。 其 他 约 束 , 例 如 , 关 于 列 的 排 序 说 明 、 组 合 列 等 。 6.3.1 完 整 性 的 语 义 约 束(2) 静 态 元 组 约 束 一 个 元 组 是 由 若 干 列 值 组 成 的 , 静 态 元 组 约 束 规定 组 成 一 个 元 组 的 各 个 列 之 间 的 约 束 关 系 。 例 如 , 一 个 学 生 的 科 目 成 绩 列 , 规 定 每 科 成 绩 取值 不 得 低 于 0, 也 不 得 高 于 100。(3) 静 态 关 系 约 束静 态 关 系 约 束 反 映 了 一 个 关 系 中 各 个 元 组 之 间或 者 若 干 关 系 之 间 存 在 的 联 系 或 约 束 。 它 包 括 : 6.3.1 完 整 性 的 语 义 约 束 实 体 完 整 性 约 束 。 即 关 键 字 段 的 值 不 为 空 。 参 照 完 整 性 约 束 。 即 一 个 关 系 的 外 码 的 取 值 与 另一 个 关 系 的 关 键 字 的 值 有 关 。 函 数 依 赖 约 束 。 大 部 分 函 数 依 赖 约 束 都 在 关 系 模式 中 定 义 。 统 计 约 束 。 即 某 个 字 段 值 与 一 个 关 系 多 个 元 组 的统 计 值 之 间 的 约 束 关 系 。 例 如 对 学 生 平 均 成 绩 的约 束 等 , 这 里 的 平 均 成 绩 就 是 统 计 值 。 6.3.1 完 整 性 的 语 义 约 束 动 态 约 束 是 指 数 据 库 从 一 种 状 态 转 变 为 另 一 种状 态 时 , 新 、 旧 值 之 间 满 足 的 约 束 条 件 , 它 反 映 了数 据 库 状 态 改 变 时 应 遵 守 的 约 束 。 按 照 约 束 对 象 不同 , 它 又 分 为 下 面 三 种 。1 动 态 约 束(1) 动 态 列 约 束(2) 动 态 元 组 约 束(3) 动 态 关 系 约 束 6.3.1 完 整 性 的 语 义 约 束 动 态 列 约 束 规 定 修 改 列 定 义 或 列 值 时 应 满 足的 约 束 条 件 , 它 包 括 : 修 改 列 定 义 时 的 约 束 。 例 如 , 将 允 许 空 值 的 列改 为 不 允 许 空 值 时 , 如 果 该 列 目 前 已 存 在 空 值 ,则 拒 绝 这 种 修 改 。 修 改 列 值 时 的 约 束 。 修 改 列 值 时 需 要 参 照 其 旧值 , 并 且 新 旧 值 之 间 需 要 满 足 某 种 约 束 条 件 。 例如 , 学 生 的 年 龄 只 能 增 长 。(1) 动 态 列 约 束 6.3.1 完 整 性 的 语 义 约 束 动 态 元 组 约 束 是 指 修 改 某 个 元 组 的 值 时 元 组中 的 各 个 字 段 之 间 要 满 足 某 种 约 束 条 件 。 例 如 ,职 工 津 贴 不 得 高 于 个 人 基 本 工 资 的 20%等 。 (2) 动 态 元 组 约 束(3) 动 态 关 系 约 束 动 态 关 系 约 束 是 加 在 关 系 变 化 时 的 限 制 条 件 ,例 如 , 事 务 一 致 性 、 原 子 性 等 约 束 条 件 。 6.3 数 据 库 的 完 整 性 6.3.1 完 整 性 的 语 义 约 束 6.3.2 完 整 性 语 义 检 查 6.3.2 完 整 性 语 义 检 查 现 代 数 据 库 技 术 采 用 对 数 据 完 整 性 的 语义 约 束 和 检 查 来 保 护 数 据 库 的 完 整 性 , 实 现 方 式 有 两 种 : 一 种 是 通 过 定 义 和 使用 完 整 性 约 束 规 则 , 另 一 种 是 通 过 触 发 器 和存 储 过 程 来 实 现 。 第 6章 数 据 库 安 全 性 和 完 整 性6.1 概 述6.2 数 据 库 的 安 全 性6.3 数 据 库 的 完 整 性6.4 SQL的 完 整 性 控 制本 章 小 结 6.4 SQL的 完 整 性 控 制 SQL中 的 完 整 性 约 束 主 要 分 为 三 类 : 域 完 整 性 、实 体 完 整 性 和 参 照 完 整 性 。 但 是 , SQL尚 不 支 持 动 态完 整 性 约 束 。 6.4.1 域 完 整 性 6.4.2 实 体 完 整 性 6.4.3 参 照 完 整 性 6.4.1 域 完 整 性 域 完 整 性 又 称 为 列 完 整 性 , 指 列 数 据 输 入 的 有效 性 。 实 现 域 完 整 性 的 方 法 可 通 过 定 义 相 应 的 约束 、 规 则 等 方 法 实 现 。1 列 约 束 定 义 列 约 束 规 定 某 个 属 性 的 值 必 须 符 合 某 种 数据 类 型 并 且 取 自 某 个 数 据 定 义 域 。 域 完 整 性 约 束施 加 于 单 个 数 据 上 。( 1) 长 途 电 话 号 码 格 式 为 : 999 9999999;( 2) 仓 库 库 存 量 0;( 3) 图 书 管 理 系 统 中 允 许 读 者 当 前 在 借 图 书 量 最 多 为 20本 。 6.4.1 域 完 整 性 域 完 整 性 可 以 使 用 CHECK约 束 、 NOT NULL约束 、 UNIQUE约 束 在 表 定 义 的 时 候 实 现 。CHECK约 束 : 是 字 段 输 入 时 的 验 证 规 则 , 表 示 一 个字 段 的 输 入 内 容 必 须 满 足 CHECK约 束 的 条 件 , 若 不满 足 , 则 数 据 无 法 正 常 输 入 。NOT NULL约 束 : 约 束 表 示 列 值 的 非 空 性 , 此 列 不允 许 为 空 ;UNIQUE约 束 : 表 示 列 值 唯 一 性 。 6.4.1 域 完 整 性【 例 6-9】 定 义 表 STUDENT的 同 时 , 定 义 字 段 的 非空 性 和 借 书 数 字 段 的 约 束 条 件 。CREATE TABLE STUDENT( 借 书 证 号 char(8) NOT NULL, 姓 名 char(8) NOT NULL, 专 业 名 char(12) NOT NULL, 性 别 bit NOT NULL, 借 书 数 tinyint CHECK(借 书 数 =0 and 借 书 数=20) NULL )NOT NULL约 束 限 定 了 借 书 证 号 、 姓 名 、 专 用 名 、 性别 不 能 为 空 值 ; CHECK约 束 限 定 限 定 了 借 书 数 的 取 值范 围 。 6.4.1 域 完 整 性【 例 6-10】 建 立 一 个 货 物 表 GOODS, 要 求 货 品 编 号 Gno列 取 值 唯 一 , 货 品 名 称 Gname列 不 允 许 为 空 。CREATE TABLE GOODS( Gno char(7) UNIQUE, Gname char(8) NOT NULL,Nums int ) 6.4.1 域 完 整 性2 规 则规 则 对 象 的 使 用 步 骤 如 下 :( 1) 定 义 规 则 对 象 语 法 格 式 :CREATE RULE rule AS condition_expression参 数 含 义 : 参 数 rule为 定 义 的 新 规 则 名 , 规 则 名 必 须符 合 标 识 符 规 则 ; 参 数 condition _expression为 规 则的 条 件 表 达 式 , 该 条 件 表 达 式 可 为 WHERE子 句 中 任 何 有效 的 表 达 式 , 但 规 则 表 达 式 中 不 能 包 含 列 或 其 他 数 据库 对 象 , 可 以 包 含 不 引 用 数 据 库 对 象 的 内 置 函 数 。 6.4.1 域 完 整 性( 2) 将 规 则 对 象 绑 定 到 列 或 用 户 自 定 义 类 型规 则 对 象 的 绑 定 , 使 用 的 是 系 统 存 储 过 程sp_bindrule, 语 法 格 式 如 下 :sp_bindrule rulename = rule , objname = object_name , futureonly = futureonly_flag 6.4.1 域 完 整 性 参 数 含 义 : 参 数 rule为 CREATE RULE语 句 创 建 的 规则 名 , 要 用 单 引 号 括 起 来 。 参 数 object_name为 绑 定 到规 则 的 列 或 用 户 定 义 的 数 据 类 型 , 如 果 object_name采用 “ 表 名 .字 段 名 ” 格 式 , 则 认 为 绑 定 到 表 的 列 , 否 则绑 定 到 用 户 定 义 的 数 据 类 型 ; 参 数 futureonly_flag仅 当将 规 则 绑 定 到 用 户 定 义 的 数 据 类 型 时 才 使 用 , 如 果futureonly_flag设 置 为 futureonly, 用 户 定 义 数 据 类 型的 现 有 列 不 继 承 新 规 则 。 如 果 futureonly_flag为 NULL,当 被 绑 定 的 数 据 类 型 当 前 无 规 则 时 , 新 规 则 将 绑 定 到用 户 定 义 数 据 类 型 的 每 一 列 。 6.4.1 域 完 整 性【 例 6-11】 创 建 一 个 规 则 , 并 绑 定 到 STUDENT表 的 借 书 证 号 字 段 。CREATE RULE num_rule AS num like 1-61-61-9 1-9 1-9 1-9 0-9 0-9 0-9GOEXEC sp_bindrule num_rule, STUDENT.借 书 证 号 6.4.1 域 完 整 性( 3) 规 则 对 象 的 删 除删 除 规 则 对 象 前 , 首 先 应 使 用 系 统 存 储 过 程sp_unbindrule, 解 除 被 绑 定 对 象 与 规 则 对 象 之 间的 绑 定 关 系 。语 法 格 式 :sp_unbindrule object_name = object_name , futureonly = futureonly_flag 6.4.1 域 完 整 性 在 解 除 列 或 自 定 义 类 型 与 规 则 对 象 之 间 的 绑 定关 系 后 , 就 可 以 删 除 规 则 对 象 了 。 语 法 格 式 : 参 数 含 义 : 参 数 rule指 定 删 除 的 规 则 名 , 可 以 包 含规 则 所 有 者 名 ; 参 数 n表 示 可 以 指 定 多 个 规 则 同 时 删除 。 DROP RULE rule,n 6.4.1 域 完 整 性【 例 6-12】 解 除 num_rule规 则 对 象 与 STUDENT表 的 借书 证 号 的 绑 定 关 系 , 然 后 删 除 规 则 对 象 num_rule。EXEC sp_unbindrule num_ruleDROP RULE num_rule 6.4.1 域 完 整 性 3 触 发 器 触 发 器 就 是 一 类 靠 事 件 驱 动 的 特 殊 过 程 , 一 旦由 某 个 用 户 定 义 , 任 何 用 户 对 该 数 据 的 增 、 删 、 改操 作 均 由 服 务 器 自 动 激 活 相 应 的 触 发 器 , 在 核 心 层进 行 集 中 的 完 整 性 控 制 。 一 个 触 发 器 应 包 括 下 面 两 个 功 能 : ( 1) 指 明 什 么 条 件 下 触 发 器 被 执 行 。 ( 2) 指 明 触 发 器 执 行 什 么 动 作 。 6.4.1 域 完 整 性:=CREATE TRIGGER ON WITH ENCRYPTION /*说 明 是 否 采 用 加 密 方 式 */ FOR| AFTER|INSTEAD OF /*定 义 触 发 器 的 类 型 */ ASIF UPDATE(column)AND|ORUPDATE(column) n| IF(COLUMNS_UPDATED()bitwise_operatorupdated_bitmask) /*两 个 IF子 句 用 于 说 明 触 发 器 执 行 的 条 件 */ Sql_statements /*T-SQL语 句 序 列 */ 6.4.1 域 完 整 性【 例 6-13】 在 数 据 库 XSBOOK中 创 建 一 触 发 器 , 当向 BORROW表 插 入 一 记 录 时 , 检 查 该 记 录 的 借 书证 号 在 STUDENT表 是 否 存 在 , 检 查 图 书 的 ISBN号 在 BOOK表 中 是 否 存 在 , 及 图 书 的 库 存 量 是 否大 于 0, 若 有 一 项 为 否 , 则 不 允 许 插 入 。 6.4.1 域 完 整 性CREATE TRIGGER jy_insert ON BORROW FOR INSERT ASIF EXISTS( select * from inserted a where a.借 书 证 号 not in ( select b.借 书 证 号 from STUDENT b) or a.ISBN not in(select c.ISBN from BOOK c)OR EXISTS(select * from book where 库 存 量 =0) BEGIN RAISERROR(违 背 数 据 一 致 性 ,16,1) ROLLBACK TRANSACTION END 6.4.1 域 完 整 性ELSEBEGIN UPDATE STUDENT SET 借 书 数 =借 书 数 +1 WHERE STUDENT.借 书 证 号 IN (select inserted.借 书 证 号 from inserted) UPDATE BOOK SET 库 存 量 =库 存 量 -1 WHERE book.ISBN IN (select inserted.ISBN from inserted)END 6.4.1 域 完 整 性 inserted 逻 辑 表 : 当 向 表 中 插 入 数 据 时 ,INSERT触 发 器 触 发 执 行 , 新 的 记 录 插 入 到 触 发 器 表和 inserted表 中 。 触 发 器 中 使 用 的 特 殊 表 执 行 触 发 器 时 , 系 统 创 建 了 两 个 特 殊 的 逻 辑 表Inserted表 和 deleted表 。 6.4.1 域 完 整 性 deleted逻 辑 表 : 用 于 保 存 已 从 表 中 删 除 的 记 录 ,当 触 发 一 个 DELETE触 发 器 时 , 被 删 除 的 记 录 存 放 到deleted逻 辑 表 中 。 修 改 一 条 记 录 等 于 插 入 一 新 记 录 , 同 时 删 除 旧 记录 。 当 对 定 义 了 UPDATE触 发 器 的 表 记 录 修 改 时 , 表中 原 记 录 移 动 到 DELETE表 中 , 修 改 过 的 记 录 插 入 到inserted表 中 。 触 发 器 可 检 查 deleted表 、 inserted表及 被 修 改 的 表 。 触 发 器 中 使 用 的 特 殊 表 6.4 SQL的 完 整 性 控 制 6.4.1 域 完 整 性 6.4.2 实 体 完 整 性 6.4.3 参 照 完 整 性 6.4.2 实 体 完 整 性 实 体 完 整 性 又 称 为 行 的 完 整 性 , 要 求表 中 有 一 个 主 键 , 其 值 不 能 为 空 且 唯 一 地标 识 对 应 的 记 录 。 SQL在 CREATE TABLE语 句 中 提 供 PRIMARY KEY创 建 主 码 列 ,实 现 数 据 的 实 体 完 整 性 。 6.4.2 实 体 完 整 性 一 个 表 只 能 有 一 个 PRIMARY KEY约 束 , 而 且PRIMARY KEY约 束 中 的 列 不 能 取 空 值 。 当 为 表 定义 PRIMARY KEY约 束 时 , SQL为 主 键 创 建 唯 一 索引 , 实 现 主 键 数 据 的 唯 一 性 , 在 查 询 中 , 该 索 引 可 用来 对 数 据 进 行 快 速 访 问 。 如 果 PRIMARY KEY约 束是 由 多 列 组 合 定 义 的 , 则 某 一 列 的 值 可 以 重 复 , 但PRIMARY KEY约 束 定 义 中 所 有 列 的 组 合 值 必 须 唯一 。 6.4.2 实 体 完 整 性用 PRIMARY KEY约 束 定 义 了 关 系 的 主 码 后 ,每 当 用 户 程 序 对 主 码 列 进 行 更 新 操 作 时 , 系 统 自动 进 行 完 整 性 检 查 , 凡 操 作 使 主 码 值 为 空 值 或 使主 码 值 在 表 中 不 唯 一 , 系 统 拒 绝 此 操 作 , 从 而 保证 了 实 体 完 整 性 。 6.4 SQL的 完 整 性 控 制 6.4.1 域 完 整 性 6.4.2 实 体 完 整 性 6.4.3 参 照 完 整 性 6.4.3 参 照 完 整 性 参 照 完 整 性 是 关 系 模 式 的 另 一 种 重 要 约 束 , 又称 为 引 用 完 整 性 。 参 照 完 整 性 保 证 主 表 中 的 数 据 与从 表 中 数 据 的 一 致 性 , 通 过 定 义
展开阅读全文