數(shù)據(jù)庫(kù)安全技術(shù)及應(yīng)用
《數(shù)據(jù)庫(kù)安全技術(shù)及應(yīng)用》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)庫(kù)安全技術(shù)及應(yīng)用(82頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第 6章 數(shù) 據(jù) 庫(kù) 安 全 技 術(shù) 目 錄 6.1 數(shù) 據(jù) 庫(kù) 的 安 全 性 1 6.2 完 整 性 控 制 2 6.4 數(shù) 據(jù) 備 份 與 恢 復(fù)4 6.3 并 發(fā) 控 制 與 封 鎖3 6.6 本 章 小 結(jié) 6 6.5 數(shù) 據(jù) 庫(kù) 安 全 解 決 方 案5 本 章 要 點(diǎn) 及 教 學(xué) 目 標(biāo)本 章 要 點(diǎn) 數(shù) 據(jù) 庫(kù) 的 安 全 性 、 權(quán) 限 及 監(jiān) 控 方 法 數(shù) 據(jù) 完 整 性 控 制 并 發(fā) 控 制 與 封 鎖 技 術(shù) 數(shù) 據(jù) 備 份 與 恢 復(fù) 數(shù) 據(jù) 庫(kù) 安 全 解 決 方 案教 學(xué) 目 標(biāo) 理 解 數(shù) 據(jù) 庫(kù) 的 安 全 性 、 權(quán) 限 及 監(jiān) 控 方 法 了 解 數(shù)
2、據(jù) 完 整 性 控 制 、 并 發(fā) 控 制 與 封 鎖 技 術(shù) 掌 握 數(shù) 據(jù) 備 份 與 恢 復(fù) 理 解 數(shù) 據(jù) 庫(kù) 安 全 解 決 方 案 6.1 數(shù) 據(jù) 庫(kù) 的 安 全 性6.1.1數(shù) 據(jù) 庫(kù) 安 全 性 問(wèn) 題 1 數(shù) 據(jù) 庫(kù) 安 全 性 的 概 念 數(shù) 據(jù) 庫(kù) 的 安 全 性 是 指 保 護(hù) 數(shù) 據(jù) 庫(kù) 系 統(tǒng) 和 數(shù) 據(jù) , 以 防 止 非 法 使用 所 造 成 的 數(shù) 據(jù) 泄 漏 、 更 改 或 破 壞 。 數(shù) 據(jù) 庫(kù) 管 理 系 統(tǒng) 安 全 性 保 護(hù)是 通 過(guò) 各 種 防 范 措 施 以 防 止 用 戶 越 權(quán) 使 用 數(shù) 據(jù) 庫(kù) 。 數(shù) 據(jù) 庫(kù) 系 統(tǒng) 中一 般 采 用 用
3、 戶 標(biāo) 識(shí) 和 鑒 別 、 存 取 控 制 、 視 圖 以 及 密 碼 存 儲(chǔ) 等 技 術(shù)進(jìn) 行 安 全 控 制 。 數(shù) 據(jù) 庫(kù) 安 全 的 核 心 和 關(guān) 鍵 是 其 數(shù) 據(jù) 安 全 。 數(shù) 據(jù) 安 全 是 指 防 止 數(shù) 據(jù) 信 息 被 故 意 的 或 偶 然 的 非 授 權(quán) 泄 露 、更 改 、 破 壞 或 使 數(shù) 據(jù) 信 息 被 非 法 的 系 統(tǒng) 辨 識(shí) 與 控 制 。 以 確 保 數(shù) 據(jù)的 完 整 性 、 保 密 性 、 可 用 性 和 可 控 性 。 由 于 數(shù) 據(jù) 庫(kù) 保 存 著 大 量 的重 要 信 息 和 機(jī) 密 數(shù) 據(jù) , 而 且 在 數(shù) 據(jù) 庫(kù) 系 統(tǒng) 中 大 量 數(shù)
4、 據(jù) 集 中 存 放 ,為 許 多 用 戶 共 享 , 因 此 , 加 強(qiáng) 對(duì) 數(shù) 據(jù) 庫(kù) 訪 問(wèn) 的 控 制 和 數(shù) 據(jù) 安 全 防 護(hù) 至 關(guān) 重 要 。 6.1 數(shù) 據(jù) 庫(kù) 的 安 全 性數(shù) 據(jù) 庫(kù) 安 全 分 為 系 統(tǒng) 安 全 性 和 數(shù) 據(jù) 安 全 性 . 系 統(tǒng) 安 全 性 是 指 在 系 統(tǒng) 級(jí) 控 制 數(shù) 據(jù) 庫(kù) 的 存 取 和 使 用 的 機(jī) 制 , 包 含 : (1) 有 效 的 用 戶 名 /口 令 的 組 合 ; (2) 對(duì) 用 戶 可 連 接 數(shù) 據(jù) 庫(kù) 授 權(quán) ; (3) 用 戶 對(duì) 象 可 用 的 磁 盤 空 間 的 數(shù) 量 ; (4) 用 戶 的 資 源 限
5、制 ; (5) 數(shù) 據(jù) 庫(kù) 審 計(jì) 有 效 性 ; (6) 用 戶 可 執(zhí) 行 的 系 統(tǒng) 操 作 。 數(shù) 據(jù) 安 全 性 是 在 對(duì) 象 級(jí) 控 制 數(shù) 據(jù) 庫(kù) 的 存 取 和 使 用 的 機(jī) 制 , 包 括 用 戶可 存 取 指 定 的 模 式 對(duì) 象 及 在 對(duì) 象 上 允 許 具 體 操 作 類 型 。 【 案 例 6-1】 某 銀 行 以 數(shù) 據(jù) 安 全 業(yè) 務(wù) 價(jià) 值 鏈 ,可 將 數(shù) 據(jù) 庫(kù) 安 全 的 技 術(shù) 手段 分 為 預(yù) 防 保 護(hù) 類 、 檢 測(cè) 跟 蹤 類 和 響 應(yīng) 恢 復(fù) 類 等 3大 類 , 如 圖 6-1所 示 : 預(yù) 防保 護(hù) 類預(yù) 防預(yù) 防保 護(hù) 類保 護(hù)
6、 類 檢 測(cè)跟 蹤 類檢 測(cè)檢 測(cè)跟 蹤 類跟 蹤 類 響 應(yīng)恢 復(fù) 類響 應(yīng)響 應(yīng)恢 復(fù) 類恢 復(fù) 類 訪 問(wèn) 管 理AM訪 問(wèn) 管 理身 份 認(rèn) 證I利 用 文 本 編 輯 器 查 看 日 志 。n 3.記 錄 配 置 信 息n 當(dāng) 無(wú) 法 啟 動(dòng) SQL Server時(shí) 借 助 服 務(wù) 器 的 配 置 信 息 , 微 軟 公 司 技 術(shù) 支持 部 門 可 以 幫 助 恢 復(fù) . n 服 務(wù) 器 的 運(yùn) 行 。 在 日 常 的 維 護(hù) 計(jì) 劃 中 應(yīng) 該 安 排 對(duì) 配 置 信 息 的 維 護(hù) ,特 別 是 當(dāng) 配 置 信 息 修 改 時(shí) 。 使 用 系 統(tǒng) 過(guò) 程 sp_configur
7、e 可 以 生 成 服 務(wù) 器 的 配 置 信 息 列 表 。n( 1) 打 開 SSMS。n( 2) 選 擇 服 務(wù) 器 , 單 擊 “ 連 接 ” 按 鈕 , 進(jìn) 入 SSMS窗 口 。n( 3) 打 開 一 個(gè) 新 的 查 詢 窗 口 , 可 以 輸 入 各 種 SQL命 令 。 n( 4) 在 查 詢 窗 口 中 輸 入 命 令 。 6.1 數(shù) 據(jù) 庫(kù) 的 安 全 性n6.1.4 用 戶 與 角 色 管 理n 用 戶 是 數(shù) 據(jù) 庫(kù) 級(jí) 的 安 全 策 略 ,在 為 數(shù) 據(jù) 庫(kù) 創(chuàng) 建 新 的 用 戶 前 ,必須 存 在 創(chuàng) 建 用 戶 的 一 個(gè) 登 錄 或 使 用 已 經(jīng) 存 在
8、的 登 錄 創(chuàng) 建 用 戶 .n 1. 使 用 SSMS創(chuàng) 建 用 戶n 【 案 例 6-6】 使 用 SSMS創(chuàng) 建 用 戶 的 具 體 步 驟 如 下 。n ( 1) 打 開 SSMS并 連 接 到 目 標(biāo) 服 務(wù) 器 , 在 “ 對(duì) 象 資 源 管 理 器 ” 窗 口中 , 單 擊 “ 數(shù) 據(jù) 庫(kù) ” 節(jié) 點(diǎn) 前 的 “ ” 號(hào) , 展 開 數(shù) 據(jù) 庫(kù) 節(jié) 點(diǎn) 。 單 擊 要 創(chuàng) 建用 戶 的 目 標(biāo) 數(shù) 據(jù) 節(jié) 點(diǎn) 前 的 “ ” 號(hào) ,展 節(jié) 點(diǎn) Northwind。 單 擊 “ 安 全 性 ”節(jié) 點(diǎn) 前 的 “ ” 號(hào) 。 在 “ 用 戶 ” 上 單 擊 鼠 標(biāo) 右 鍵 ,彈 出快
9、 捷 菜 單 , 從 中 選 擇 “ 新 建 用 戶 ”命 令 , 如 圖 6-10所 示 。 圖 6-10 利 用 對(duì) 象 資 源 管 理 器 創(chuàng) 建 用 戶 6.1 數(shù) 據(jù) 庫(kù) 的 安 全 性n ( 2) 在 出 現(xiàn) “ 數(shù) 據(jù) 庫(kù) 用 戶 新 建 ” 對(duì) 話 框 的 “ 常 規(guī) ” 頁(yè)面 中 , 填 寫 “ 用 戶 名 ” , 選 擇 “ 登 錄 名 ” 和 “ 默 認(rèn) 架 構(gòu) ” 名稱 。 添 加 此 用 戶 擁 有 的 架 構(gòu) 和 數(shù) 據(jù) 庫(kù) 角 色 。n ( 3) 在 “ 數(shù) 據(jù) 庫(kù) 用 戶 新 建 ” 對(duì) 話 框 的 “ 選 擇 頁(yè) ” 中 選擇 “ 安 全 對(duì) 象 ” ,進(jìn) 入
10、 權(quán) 限 設(shè) 置 頁(yè) 面 (即 “ 安 全 對(duì) 象 ” 頁(yè) 面 ).“ 安 全 對(duì) 象 頁(yè) 面 ” 主 要 用 于 設(shè) 置 數(shù) 據(jù) 庫(kù) 用 戶 擁 有 的 能 夠 訪 問(wèn)的 數(shù) 據(jù) 庫(kù) 對(duì) 象 以 及 相 應(yīng) 的 訪 問(wèn) 權(quán) 限 。 單 擊 “ 添 加 ” 按 鈕 為 該用 戶 添 加 數(shù) 據(jù) 庫(kù) 對(duì) 象 , 并 為 添 加 的 對(duì) 象 添 加 顯 示 權(quán) 限 。n 2 角 色 管 理n 角 色 用 來(lái) 簡(jiǎn) 化 將 很 多 權(quán) 限 分 配 給 用 戶 這 一 復(fù) 雜 任 務(wù) 的 管理 。 用 戶 可 根 據(jù) 所 執(zhí) 行 的 任 務(wù) 成 為 一 個(gè) 或 多 個(gè) 角 色 的 成 員 。用 戶 可
11、不 必 是 任 何 角 色 的 成 員 , 也 可 為 用 戶 分 配 個(gè) 人 權(quán) 限 。 6.1 數(shù) 據(jù) 庫(kù) 的 安 全 性n 1) 在 “ 對(duì) 象 資 源 管 理 器 ” 中 ,單 擊 服 務(wù)器 前 “ +” 號(hào) 展 開 .單 擊 “ 安 全 性 ” 節(jié) 點(diǎn) 前“ +” 號(hào) .在 次 節(jié) 點(diǎn) 可 看 到 固 定 服 務(wù) 器 角 色 ,在 要 給 用 戶 添 加 的 目 標(biāo) 角 色 上 單 擊 鼠 標(biāo) 右 鍵 ,彈 出 快 捷 菜 單 從 中 選 擇 “ 屬 性 ” .n 2) 在 “ 服 務(wù) 器 角 色 屬 性 ” 對(duì) 話 框 中 ,單擊 “ 添 加 (A) ” 按 鈕 .3) 在 出 現(xiàn)
12、 “ 選 擇 登陸 名 ” 對(duì) 話 框 中 單 擊 “ 瀏 覽 (B) ” 按 鈕 。n 4) 在 出 現(xiàn) “ 查 找 對(duì) 象 ” 對(duì) 話 框 中 ,選 擇目 標(biāo) 用 戶 前 的 復(fù) 選 框 , 選 中 其 用 戶 , 最 后單 擊 “ 確 定 ” 按 鈕 . 5) 回 到 “ 選 擇 登 陸 名” 對(duì) 話 框 , 可 以 看 到 選 中 的 目 標(biāo) 用 戶 已 包含 在 對(duì) 話 框 中 ,確 定 無(wú) 誤 后 ,單 擊 “ 確 定 ” .n 6) 回 到 “ 服 務(wù) 器 角 色 屬 性 ” 對(duì) 話 框 。確 定 添 加 的 用 戶 無(wú) 誤 后 , 單 擊 “ 確 定 ” 。圖 6-11 利 用
13、 對(duì) 象 資 源 管 理 器 為 用 戶 分 配 固 定 服 務(wù) 器 角 色 (1) 固 定 服 務(wù) 器 角 色 SQL安 裝 時(shí) 就 創(chuàng) 建 了 在 服 務(wù) 器 級(jí) 別 上 應(yīng) 用 大 量 預(yù) 定 義 的 角 色 , 每 個(gè)角 色 對(duì) 應(yīng) 著 相 應(yīng) 的 管 理 權(quán) 限 。 通 過(guò) 給 用 戶 分 配 固 定 服 務(wù) 器 角 色 , 可 以 使用 戶 具 有 執(zhí) 行 管 理 任 務(wù) 的 角 色 權(quán) 限 。 固 定 服 務(wù) 器 角 色 的 維 護(hù) 比 單 個(gè) 權(quán) 限容 易 , 但 是 固 定 服 務(wù) 器 角 色 不 能 修 改 。 【 案 例 6-7】 用 SSMS為 用 戶 分 配 固 定
14、服 務(wù) 器 角 色 , 從 而 使 該 用 戶 獲 取相 應(yīng) 的 權(quán) 限 。 6.1 數(shù) 據(jù) 庫(kù) 的 安 全 性n (2) 數(shù) 據(jù) 庫(kù) 角 色 n 在 創(chuàng) 建 每 個(gè) 數(shù) 據(jù) 庫(kù) 時(shí) 都 添 加 這 些 角 色 到 新 創(chuàng) 建 的 數(shù) 據(jù) 庫(kù) 中 , 每 個(gè) 角 色 對(duì)應(yīng) 著 相 應(yīng) 的 權(quán) 限 。 這 些 數(shù) 據(jù) 庫(kù) 角 色 用 于 授 權(quán) 給 數(shù) 據(jù) 庫(kù) 用 戶 , 擁 有 某 種 或 某 些角 色 的 用 戶 會(huì) 獲 得 相 應(yīng) 角 色 對(duì) 應(yīng) 的 權(quán) 限 。n 可 為 數(shù) 據(jù) 庫(kù) 添 加 角 色 , 然 后 把 角 色 分 配 給 用 戶 , 使 用 戶 擁 有 相 應(yīng)的 權(quán) 限 ,
15、在 SSMS中 , 給 用 戶 添 加 角 色 ( 或 將 角 色 授 權(quán) 用 戶 ) 操 作 與 將固 定 服 務(wù) 器 角 色 授 予 用 戶 方 法 類 似 , 通 過(guò) 相 應(yīng) 角 色 的 屬 性 對(duì) 話 框 可 方便 添 加 用 戶 , 使 用 戶 成 為 角 色 成 員 。n 用 戶 也 可 使 用 圖 形 界 面 工 具 Transact-SQL命 令 創(chuàng) 建 新 角 色 , 使 之擁 有 某 個(gè) 或 某 些 權(quán) 限 ; 創(chuàng) 建 的 角 色 還 可 修 改 其 對(duì) 應(yīng) 的 權(quán) 限 。 各 種 方 法都 需 完 成 以 下 3項(xiàng) 任 務(wù) : 創(chuàng) 建 新 的 數(shù) 據(jù) 庫(kù) 角 色 、 給
16、創(chuàng) 建 的 角 色 分 配 權(quán)限 、 將 角 色 授 予 某 個(gè) 用 戶 。n 【 案 例 6-8】 在 SSMS創(chuàng) 建 新 的 數(shù) 據(jù) 庫(kù) 角 色 操 作 步 驟 如 下 。 n 展 開 要 添 加 新 角 色 的 目 標(biāo) 數(shù) 據(jù) 庫(kù) , 單 擊 目 標(biāo) 數(shù) 據(jù) 庫(kù) 節(jié) 點(diǎn) 下 的 “ 安全 性 ” 節(jié) 點(diǎn) 前 的 “ +” 號(hào) , 展 開 節(jié) 點(diǎn) 。 然 后 在 “ 角 色 ” 節(jié) 點(diǎn) 上 單 擊 右鍵 , 彈 出 快 捷 菜 單 , 選 擇 快 捷 菜 單 中 的 “ 新 建 ” 下 “ 新 建 數(shù) 據(jù) 庫(kù) 角色 ” 命 令 , 如 圖 6-12所 示 。 6.1 數(shù) 據(jù) 庫(kù) 的 安 全
17、 性n 出 現(xiàn) “ 數(shù) 據(jù) 庫(kù) 角 色 -新 建 ” 對(duì) 話框 ,在 “ 常 規(guī) ” 頁(yè) 面 中 , 添 加 “ 角 色名 稱 ” 和 “ 所 有 者 ” ,并 選 擇 此 角 色所 擁 有 的 架 構(gòu) 。 在 此 對(duì) 話 框 中 也 可以 單 擊 “ 添 加 ” 按 鈕 為 新 創(chuàng) 建 的 角色 添 加 用 戶 。n 選 擇 “ 選 擇 頁(yè) ” 中 的 “ 安 全 對(duì) 象” 項(xiàng) , 進(jìn) 入 權(quán) 限 設(shè) 置 頁(yè) 面 ( 即 “ 安全 對(duì) 象 ” 頁(yè) 面 ) , 之 后 可 以 為 新 創(chuàng)建 的 角 色 添 加 所 擁 有 的 數(shù) 據(jù) 庫(kù) 對(duì) 象的 訪 問(wèn) 權(quán) 限 。n 此 外 ,還 可 以 使
18、 用 T-SQL語(yǔ) 句 來(lái) 實(shí) 現(xiàn) 同 樣 目 標(biāo) 的 相 關(guān) 內(nèi) 容 。 6-12新 建 數(shù) 據(jù) 庫(kù) 角 色 6.2 完 整 性 控 制 6.2 完 整 性 控 制n 6.2.1 數(shù) 據(jù) 的 完 整 性n 數(shù) 據(jù) 完 整 性 (Data Integrity)是 指 數(shù) 據(jù) 的 精 確 性 (Accuracy)和 可 靠 性 (Reliability)。 用 于 防 止 數(shù) 據(jù) 庫(kù) 中 存 在 不 符 合 語(yǔ) 義 規(guī)定 的 數(shù) 據(jù) , 造 成 無(wú) 效 操 作 或 錯(cuò) 誤 。 DBMS提 供 一 種 檢 查 數(shù) 據(jù) 庫(kù) 中的 數(shù) 據(jù) 是 否 滿 足 語(yǔ) 義 規(guī) 定 的 條 件 的 機(jī) 制 , 數(shù)
19、 據(jù) 語(yǔ) 義 檢 查 條 件 稱為 數(shù) 據(jù) 完 整 性 約 束 條 件 ,作 為 表 定 義 的 一 部 分 存 儲(chǔ) 在 數(shù) 據(jù) 庫(kù) 中 。DBMS中 檢 查 數(shù) 據(jù) 完 整 性 條 件 的 機(jī) 制 就 稱 為 完 整 性 檢 查 。n 狹 義 上 數(shù) 據(jù) 的 完 整 性 和 安 全 性 是 數(shù) 據(jù) 庫(kù) 保 護(hù) 的 兩 個(gè) 不 同 的 方面 。 安 全 性 側(cè) 重 保 護(hù) 數(shù) 據(jù) 庫(kù) , 以 防 止 非 法 使 用 所 造 成 數(shù) 據(jù) 的 泄露 、 更 改 或 破 壞 , 其 防 范 對(duì) 象 是 非 法 用 戶 和 非 法 操 作 ; 完 整 性是 防 止 合 法 用 戶 使 用 數(shù) 據(jù) 庫(kù)
20、時(shí) 向 其 中 加 入 不 符 合 語(yǔ) 義 的 數(shù) 據(jù) , 防 范 對(duì) 象 側(cè) 重 不 合 語(yǔ) 義 的 數(shù) 據(jù) 。 但 從 宏 觀 角 度 , 安 全 性 和 完 整性 密 切 相 關(guān) , 完 整 性 也 屬 于 安 全 性 范 疇 。 6.2 完 整 性 控 制 6.2.2 完 整 性 規(guī) 則 構(gòu) 成n由 DBA或 應(yīng) 用 開 發(fā) 者 所 決 定 的 一 組 預(yù) 定 義 的 完 整 性 約 束 條 件 稱為 規(guī) 則 。 關(guān) 系 數(shù) 據(jù) 庫(kù) 允 許 可 用 完 整 性 約 束 和 數(shù) 據(jù) 庫(kù) 觸 發(fā) 器 定 義各 種 數(shù) 據(jù) 完 整 性 規(guī) 則 。 數(shù) 據(jù) 完 整 性 規(guī) 則 主 要 由 以
21、下 3部 分 構(gòu) 成 :n 觸 發(fā) 條 件 : 規(guī) 定 系 統(tǒng) 何 時(shí) 使 用 規(guī) 則 檢 查 數(shù) 據(jù) ;n 約 束 條 件 : 規(guī) 定 系 統(tǒng) 檢 查 用 戶 發(fā) 出 的 操 作 請(qǐng) 求 違 背 了 什么 樣 的 完 整 性 約 束 條 件 ;n 違 約 響 應(yīng) : 規(guī) 定 系 統(tǒng) 如 果 發(fā) 現(xiàn) 用 戶 的 操 作 請(qǐng) 求 違 背 了 完整 性 約 束 條 件 , 應(yīng) 該 采 取 一 定 的 動(dòng) 作 來(lái) 保 證 數(shù) 據(jù) 的 完 整 性 , 即違 約 時(shí) 要 做 的 事 情 。 完 整 性 規(guī) 則 從 執(zhí) 行 時(shí) 間 上 可 分 為 立 即 執(zhí) 行 約 束 和 延 遲 執(zhí) 行 約束 .關(guān) 系
22、 數(shù) 據(jù) 模 型 的 完 整 性 約 束 , 是 對(duì) 表 的 列 定 義 規(guī) 則 的 說(shuō) 明 性 方 法 , 其 完 整 性 約 束 條 件 包 括 3大 類 : 實(shí) 體 完 整 性 、 參 照 完 整 性和 用 戶 定 義 完 整 性 . 6.2 完 整 性 控 制n6.2.3 完 整 性 約 束 條 件 的 分 類n 數(shù) 據(jù) 的 完 整 性 約 束 可 分 以 下 兩 類 :n 1 從 約 束 條 件 使 用 的 對(duì) 象 分n 從 約 束 條 件 使 用 的 對(duì) 象 分 為 值 約 束 和 結(jié) 構(gòu) 約 束 2種 :n ( 1) 值 約 束 : 對(duì) 數(shù) 據(jù) 類 型 、 數(shù) 據(jù) 格 式 、 取
23、 值 范 圍 及 空 值 等 進(jìn) 行 規(guī) 定 。n ( 2) 結(jié) 構(gòu) 約 束 : 即 對(duì) 數(shù) 據(jù) 之 間 聯(lián) 系 的 約 束 。n 數(shù) 據(jù) 庫(kù) 中 同 一 關(guān) 系 的 不 同 屬 性 間 應(yīng) 滿 足 一 定 約 束 條 件 , 同 時(shí) 不 同 關(guān)系 的 屬 性 間 也 有 聯(lián) 系 也 應(yīng) 滿 足 一 定 約 束 條 件 。 常 見(jiàn) 的 結(jié) 構(gòu) 約 束 有 4種 :n 1) 函 數(shù) 依 賴 約 束 。 明 確 同 一 關(guān) 系 中 不 同 屬 性 之 間 應(yīng) 滿 足 的 約 束 條 件 。n 2) 實(shí) 體 完 整 性 約 束 。 規(guī) 定 鍵 的 屬 性 列 必 須 唯 一 ,其 值 不 能 為 空
24、 或 部 分 為 空 ,n 3) 參 照 完 整 性 約 束 。 規(guī) 定 不 同 關(guān) 系 的 屬 性 之 間 的 約 束 條 件 .n 4) 統(tǒng) 計(jì) 約 束 。 n 2 從 約 束 對(duì) 象 的 狀 態(tài) 分n 從 約 束 對(duì) 象 的 狀 態(tài) 分 為 靜 態(tài) 約 束 和 動(dòng) 態(tài) 約 束 2種 。n ( 1) 靜 態(tài) 約 束 .指 對(duì) 數(shù) 據(jù) 庫(kù) 每 一 個(gè) 確 定 狀 態(tài) 所 應(yīng) 滿 足 的 約 束 條 件 ,是 反 映 數(shù) 據(jù) 庫(kù) 狀 態(tài) 合 理 性 的 約 束 , 這 是 最 重 要 的 一 類 完 整 性 約 束 。n ( 2) 動(dòng) 態(tài) 約 束 .指 數(shù) 據(jù) 庫(kù) 從 一 種 狀 態(tài) 轉(zhuǎn) 變
25、為 另 一 種 狀 態(tài) 時(shí) , 新 舊 值之 間 所 應(yīng) 滿 足 的 約 束 條 件 , 動(dòng) 態(tài) 約 束 反 映 的 是 數(shù) 據(jù) 庫(kù) 狀 態(tài) 變 遷 的 約 束 。 6.2 完 整 性 控 制n6.2.4 數(shù) 據(jù) 完 整 性 的 實(shí) 施n 數(shù) 據(jù) 庫(kù) 采 用 多 種 方 法 以 保 證 數(shù) 據(jù) 完 整 性 , 包 括 外 鍵 、 束 約 、 規(guī)則 和 觸 發(fā) 器 。n 1 實(shí) 現(xiàn) 數(shù) 據(jù) 完 整 性 的 方 法n 1) 在 服 務(wù) 器 端 。 定 義 表 時(shí) 聲 明 數(shù) 據(jù) 完 整 性 , 在 服 務(wù) 器 端 以 觸發(fā) 器 來(lái) 實(shí) 現(xiàn) 。n 2) 在 客 戶 端 。 在 應(yīng) 用 程 序 中 編
26、 寫 代 碼 來(lái) 保 證 。 在 客 戶 端 實(shí) 現(xiàn)數(shù) 據(jù) 完 整 性 的 好 處 是 在 將 數(shù) 據(jù) 發(fā) 送 到 服 務(wù) 器 端 之 前 , 可 以 先 進(jìn) 行 判斷 , 然 后 , 只 將 正 確 的 數(shù) 據(jù) 發(fā) 送 給 數(shù) 據(jù) 庫(kù) 服 務(wù) 器 。n 2. 完 整 性 約 束 條 件 的 作 用 對(duì) 象 及 實(shí) 現(xiàn) n 完 整 性 約 束 條 件 的 作 用 對(duì) 象 為 : 字 段 ( 列 ) 級(jí) 約 束 : 數(shù) 據(jù) 類 型 、 格 式 、 取 值 范 圍 、 空 值 約 束 行 ( 元 組 ) 級(jí) 約 束 : 各 字 段 之 間 聯(lián) 系 的 約 束 .訂 貨 數(shù) 量 小 于 等于 庫(kù) 存
27、 數(shù) 量 . 表 ( 關(guān) 系 ) 級(jí) 約 束 : 表 約 束 是 指 若 干 行 之 間 、 表 之 間 的 聯(lián) 系 的約 束 .如 零 件 ID的 取 值 不 能 重 復(fù) 也 不 能 取 空 值 。 具 體 實(shí) 現(xiàn) 包 括 : 主 關(guān) 鍵 字 約 束 、 外 關(guān) 鍵 字 約 束 、 唯 一 性 約 束 、檢 查 約 束 、 缺 省 約 束 .約 束 提 供 了 自 動(dòng) 保 持 數(shù) 據(jù) 完 整 性 的 一 種 方 法 6.2 完 整 性 控 制n ( 1) 主 關(guān) 鍵 字 約 束 n 主 關(guān) 鍵 字 約 束 ( Primary Key Constraint, 簡(jiǎn) 稱 主 鍵 約 束 ) 指 定
28、 表的 一 列 或 幾 列 的 組 合 的 值 在 表 中 具 有 唯 一 性 , 每 個(gè) 表 中 只 能 有 一 列 被 指定 為 主 關(guān) 鍵 字 , 且 IMAGE 和 TEXT 類 型 的 字 段 都 不 能 被 指 定 為 主 關(guān) 鍵 字, 也 不 允 許 指 定 主 關(guān) 鍵 字 列 有 NULL 屬 性 。 主 鍵 約 束 可 以 確 保 實(shí) 體 完 整 性。 可 在 創(chuàng) 建 表 時(shí) 定 義 主 鍵 約 束 , 也 可 在 以 后 改 變 表 時(shí) 添 加 。n 定 義 主 鍵 約 束 時(shí) 需 指 定 約 束 名 .如 未 指 定 SQL會(huì) 自 動(dòng) 為 該 約 束 分 配 一名 字 。
29、 如 果 將 主 鍵 約 束 定 義 在 一 個(gè) 已 包 含 數(shù) 據(jù) 的 列 上 , 那 么 , 該 列 中 已存 在 的 數(shù) 據(jù) 將 被 檢 查 .n 如 果 發(fā) 現(xiàn) 任 何 重 復(fù) 的 值 , 則 主 鍵 約 束 將 被 拒 絕 。 其 語(yǔ) 法 如 下 :n CONSTRAINT constraint_namen PRIMARY KEY CLUSTERED | NONCLUSTERED n ( column_name1, column_name2, ,column_name16)n 【 案 例 6-9】 創(chuàng) 建 訂 單 ( Orders) 表 , 訂 單 編 號(hào) ( cOrderNo) 為
30、 主 鍵 . n CREATE TABLE Orders n (n cOrderNo CHAR(6) CONSTRAINTpkOrderNoPRIMARYKEYCLUSTERED, n ) n 也 可 用 : ALTER TABLE Orders n ADD CONSTRAINT pkOrderNo PRIMARY KEY CLUSTERED (cOrderNo) 6.2 完 整 性 控 制n ( 2) 外 關(guān) 鍵 字 約 束 n 外 關(guān) 鍵 字 約 束 ( Foreign Key Constraint, 簡(jiǎn) 稱 外 鍵 約 束 ) 定 義了 表 之 間 的 關(guān) 系 。 當(dāng) 一 個(gè) 表 中 的
31、 數(shù) 據(jù) 依 賴 于 另 一 個(gè) 表 中 的 數(shù) 據(jù) 時(shí) , 你可 以 使 用 外 鍵 約 束 避 免 兩 個(gè) 表 之 間 的 不 一 致 性 。n 當(dāng) 一 個(gè) 表 中 的 一 個(gè) 列 /多 個(gè) 列 的 組 合 和 其 它 表 中 的 主 關(guān) 鍵 字 定 義相 同 時(shí) , 就 可 以 將 這 些 列 /列 的 組 合 定 義 為 外 關(guān) 鍵 字 , 并 設(shè) 定 它 適 合 哪個(gè) 表 中 哪 些 列 相 關(guān) 聯(lián) 。 還 可 以 使 用 級(jí) 聯(lián) 更 新 和 插 入 檢 查 方 法 。 外 鍵 約束 實(shí) 施 了 引 用 完 整 性 。 與 主 關(guān) 鍵 字 相 同 , 不 能 使 用 一 個(gè) 定 義
32、為 TEXT 或 IMAGE 數(shù) 據(jù) 類 型 的 列 創(chuàng) 建 外 關(guān) 鍵 字 。 外 關(guān) 鍵 字 最 多 由 16個(gè) 列 組 成 。 n 外 關(guān) 鍵 字 約 束 語(yǔ) 法 如 下 :n CONSTRAINT constraint_namen FOREIGN KEY ( column_name1, column_name2, ,column_name16)n REFERENCES ref_table (ref_column1,ref_column2, , ref_column16)n ON DELETE CASCADE | NO ACTION n ON UPDATE CASCADE | NO AC
33、TION n NOT FOR REPLICATION 6.2 完 整 性 控 制n ( 3) 唯 一 性 約 束 n 唯 一 性 約 束 ( Unique Constraint) 指 定 一 個(gè) 或 多 個(gè) 列 的 組 合的 值 具 有 唯 一 性 , 以 防 止 在 列 中 輸 入 重 復(fù) 的 值 。 唯 一 性 約 束 指 定 的列 可 有 NULL屬 性 。n 由 于 主 關(guān) 鍵 字 值 具 有 唯 一 性 , 因 此 主 關(guān) 鍵 字 列 不 能 再 設(shè) 定 唯 一性 約 束 。 唯 一 性 約 束 最 多 由 16個(gè) 列 組 成 。 創(chuàng) 建 UNIQUE約 束 有 關(guān) 的 規(guī)則 為 :
34、 可 以 創(chuàng) 建 在 列 級(jí) , 也 可 以 創(chuàng) 建 在 表 級(jí) 。 不 允 許 一 個(gè) 表 中 有 兩行 取 相 同 的 非 空 值 。 一 個(gè) 表 中 可 有 多 個(gè) UNIQUE約 束 。 即 使 指 定 了WITH NOCHECK 選 項(xiàng) , 也 不 能 阻 止 根 據(jù) 約 束 對(duì) 現(xiàn) 有 數(shù) 據(jù) 進(jìn) 行 的 檢 查 .語(yǔ) 法 如 下 :n CONSTRAINT constraint_namen UNIQUE CLUSTERED | NONCLUSTERED n ( column_name1, column_name2, ,column_name16 ) 6.2 完 整 性 控 制n
35、( 4) 檢 查 約 束 n 檢 查 約 束 ( Check Constraint) 通 過(guò) 限 制 插 入 列 中 的 值 來(lái) 實(shí) 施 域完 整 性 。 可 在 一 列 上 定 義 多 個(gè) 檢 查 約 束 .按 定 義 次 序 實(shí) 施 。 當(dāng) 約 束 被定 義 成 表 級(jí) 時(shí) ,單 一 的 檢 查 約 束 可 被 應(yīng) 用 到 多 列 .語(yǔ) 法 如 下 :n CONSTRAINT constraint_namen CHECK NOT FOR REPLICATION(logical_expression)n 1) IN關(guān) 鍵 字 。 用 IN 關(guān) 鍵 字 可 以 確 保 : 鍵 入 的 值 被
36、限 制 在 一 個(gè) 常 數(shù)表 達(dá) 式 列 表 中 。n 2) LIKE關(guān) 鍵 字 。 使 用 LIKE關(guān) 鍵 字 可 通 過(guò) 通 配 符 來(lái) 確 保 輸 入 某 一 列的 值 符 合 一 定 的 模 式 。n 3) BETWEEN關(guān) 鍵 字 。 可 通 過(guò) BETWEEN指 明 常 數(shù) 表 達(dá) 式 的 范 圍 。 該 范圍 中 包 括 上 限 值 和 下 限 值 。 如 CHECK(siToyQoh BETWEEN 0 AND 100)。n ( 5) 缺 省 約 束 n 缺 省 約 束 ( Default Constraint) 可 用 于 為 某 列 指 定 一 常 數(shù) 值 ,這 樣 用 戶
37、 就 不 需 要 為 該 列 插 入 值 。 只 能 在 一 列 上 創(chuàng) 建 一 個(gè) 缺 省 約 束 ,且 該 列 不 能 是 IDENTITY列 。n 缺 省 約 束 通 過(guò) 定 義 列 的 默 認(rèn) 值 或 使 用 數(shù) 據(jù) 庫(kù) 的 默 認(rèn) 值 對(duì) 象 綁 定 表的 列 , 來(lái) 指 定 列 的 默 認(rèn) 值 。 SQL Server 推 薦 使 用 缺 省 約 束 , 而 不 使用 定 義 默 認(rèn) 值 的 方 式 來(lái) 指 定 列 的 默 認(rèn) 值 。 6.2 完 整 性 控 制n 語(yǔ) 法 如 下 :n CONSTRAINT constraint_namen DEFAULT constant_exp
38、ression FOR column_namen 如 果 表 已 經(jīng) 創(chuàng) 建 , 而 沒(méi) 有 指 定 缺 省 , 則 可 用 ALTER TABLE n 命 令 來(lái) 指 定 缺 省 :n ALTER TABLE Shoppern ADD CONSTRAINT defCity DEFAULT “ Chicago” FOR cCity n ( 6) 在 企 業(yè) 管 理 器 中 創(chuàng) 建 約 束 通 過(guò) “ 屬 性 ” 對(duì) 話 框 選 擇 操 作 , 如 圖 6-13所 示 。 6.2 完 整 性 控 制n ( 7) 系 統(tǒng) 對(duì) 約 束 的 檢 查 n 1) 主 鍵 約 束 。 每 當(dāng) 用 戶 執(zhí) 行
39、 插 入 數(shù) 據(jù) 時(shí) , 系 統(tǒng) 檢 查 新 插 入 的 數(shù) 據(jù)的 主 鍵 值 是 否 與 已 存 在 的 主 鍵 值 重 復(fù) ,或 新 插 入 的 主 鍵 值 是 否 為 空 .n 2) 唯 一 值 約 束 。 對(duì) 唯 一 值 約 束 的 檢 查 同 主 鍵 很 類 似 只 是 在 檢 查有 唯 一 值 約 束 的 列 時(shí) , 系 統(tǒng) 只 需 檢 查 新 插 入 數(shù) 據(jù) 或 者 更 改 后 的 有 唯一 值 約 束 的 列 的 值 是 否 與 表 中 已 有 數(shù) 據(jù) 有 重 復(fù) , 而 不 檢 查 是 否 有 空值 。 只 要 新 插 人 數(shù) 據(jù) 或 更 改 后 的 值 滿 足 不 重 復(fù)
40、這 個(gè) 條 件 , 才 可 進(jìn) 行操 作 。n 【 注 意 】 對(duì) 于 有 唯 一 值 約 束 的 列 , 可 以 有 空 值 , 但 整 個(gè) 列 只 允 許有 一 個(gè) 空 值 。 系 統(tǒng) 會(huì) 將 后 續(xù) 的 空 值 看 成 與 第 一 個(gè) 空 值 重 復(fù) 的 值 , 因此 全 拒 絕 操 作 。 n 3) 外 鍵 約 束 。n 4) 檢 查 約 束n 5) 缺 省 約 束 6.2 完 整 性 控 制n 6.2.5完 整 性 規(guī) 則 實(shí) 現(xiàn)n 規(guī) 則 ( Rule) 是 數(shù) 據(jù) 庫(kù) 中 對(duì) 存 儲(chǔ) 在 表 的 列 或 用 戶 自 定 義 數(shù) 據(jù) 類型 中 的 值 的 規(guī) 定 和 限 制 。 規(guī)
41、 則 是 單 獨(dú) 存 儲(chǔ) 的 獨(dú) 立 的 數(shù) 據(jù) 庫(kù) 對(duì) 象 。 規(guī)則 與 其 作 用 的 表 或 用 戶 自 定 義 數(shù) 據(jù) 類 型 是 相 互 獨(dú) 立 的 。 規(guī) 則 和 約 束可 以 同 時(shí) 使 用 , 表 的 列 可 以 有 一 個(gè) 規(guī) 則 及 多 個(gè) 檢 查 約 束 。 n 1. 創(chuàng) 建 規(guī) 則 n ( 1) 用 命 令 創(chuàng) 建n 語(yǔ) 法 為 : CREATE RULE rule_name AS condition_expressionn 其 中 condition_expression 子 句 是 規(guī) 則 的 定 義 。 可 用 于 WHERE 條 件 子 句 中 的 任 何 表
42、達(dá) 式可 包 含 算 術(shù) 運(yùn) 算 符 、 關(guān) 系 運(yùn)算 符 和 謂 詞 (IN、 LIKE、 BETWEEN 等 )。【 注 意 】 condition_expression子 句 中 的 表 達(dá) 式 必 須 以 字 符“ ”開 頭 。 示 例 說(shuō) 明CREATE RULE rulDeptName ASDeptName NOT IN (accounts,stores) 表 明 如 果 要 向 規(guī) 則 綁 定 的 列 或 用 戶自 定 義 數(shù) 據(jù) 類 型 中 插 入 值 accounts 或 stores , 這 些值 將 被 拒 絕 。 CREATE RULE rulMaxPriceAS Ma
43、xPrice = $5000 允 許 $5000或 更 大 的 值 被 插 入 到 該規(guī) 則 綁 定 的 列 中 或 用 戶 自 定 義 數(shù) 據(jù)類 型 中 。 CREATE RULE rulEmpCode ASEmpCode LIKE F-MA-Z_ 允 許 符 合 LIKE子 句 中 指 定 形 式 的字 符 串 被 插 入 到 該 規(guī) 則 綁 定 的 列 中或 用 戶 自 定 義 數(shù) 據(jù) 類 型 中 。 表 6-3 規(guī) 則 的 示 例 6.2 完 整 性 控 制n ( 2) 用 企 業(yè) 管 理 器 創(chuàng) 建 規(guī) 則 n 在 企 業(yè) 管 理 器 中 選 擇 數(shù) 據(jù) 庫(kù) 對(duì) 象 “ 規(guī) 則 ”
44、, 單 擊 右 鍵 從 快 捷 菜單 中 可 選 “ 新 建 規(guī) 則 ” 項(xiàng) 。n ( 3) 使 用 規(guī) 則 的 限 制n 某 一 個(gè) 時(shí) 刻 只 有 一 條 規(guī) 則 可 綁 定 到 某 列 或 某 用 戶 自 定 義 數(shù) 據(jù) 類型 。 如 果 一 條 規(guī) 則 被 綁 定 到 某 用 戶 自 定 義 數(shù) 據(jù) 類 型 上 , 它 并 不 會(huì) 替代 綁 定 到 該 數(shù) 據(jù) 類 型 的 列 上 的 規(guī) 則 。 如 果 一 條 新 的 規(guī) 則 綁 定 到 某 列或 某 數(shù) 據(jù) 類 型 上 , 而 該 列 或 類 型 上 已 經(jīng) 綁 定 了 一 條 規(guī) 則 , 那 么 , 新規(guī) 則 將 替 代 舊 規(guī)
45、則 。 2. 查 看 規(guī) 則 語(yǔ) 法 : sp_helptext objname = name 如 : exec sp_helptext birthday_defa 查 看 birthday_defa規(guī) 則 , 也 可 用 企 業(yè) 管 理 器 查 看規(guī) 則 如 圖 所 示 6.2 完 整 性 控 制n 3. 規(guī) 則 的 綁 定 與 松 綁 n 創(chuàng) 建 規(guī) 則 后 , 規(guī) 則 只 是 一 個(gè) 存 在 于 數(shù) 據(jù) 庫(kù) 中 的 對(duì) 象 , 并 未 發(fā) 生作 用 。 將 規(guī) 則 與 數(shù) 據(jù) 庫(kù) 表 或 用 戶 自 定 義 對(duì) 象 聯(lián) 系 起 來(lái) , 才 能 達(dá) 到 創(chuàng)建 規(guī) 則 的 目 的 。 解 除
46、 規(guī) 則 與 對(duì) 象 的 綁 定 稱 為 “ ” . n ( 1) 用 存 儲(chǔ) 過(guò) 程 Sp_bindrule 綁 定 規(guī) 則 語(yǔ) 法 : sp_bindrule rulename = rule,n objname = object_namen , futureonlyn 其 中 , 參 數(shù) 為 :n rulename = rule: 指 定 規(guī) 則 名 稱 。n objname = object_name : 指 定 規(guī) 則 綁 定 的 對(duì) 象 。n futureonly: 此 選 項(xiàng) 僅 在 綁 定 規(guī) 則 到 用 戶 自 定 義 數(shù) 據(jù) 類 型 上 時(shí)才 可 以 使 用 。 當(dāng) 指 定
47、此 選 項(xiàng) 時(shí) , 僅 以 后 使 用 此 用 戶 自 定 義 數(shù) 據(jù) 類 型的 列 會(huì) 應(yīng) 用 新 規(guī) 則 , 而 當(dāng) 前 已 經(jīng) 使 用 此 數(shù) 據(jù) 類 型 的 列 則 不 受 影 響 。 第 6 章 數(shù) 據(jù) 庫(kù) 安 全n 【 案 例 6-14】 綁 定 規(guī) 則 rulMaxPrice到 用 戶 自 定 義 數(shù) 據(jù) 類 型 MaxPrice上 , 帶 futureonly選 項(xiàng) 。 exec sp_bindrule rulMaxPrice, MaxPrice, futureonlyn 【 注 意 】 規(guī) 則 對(duì) 已 經(jīng) 輸 入 表 中 的 數(shù) 據(jù) 不 起 作 用 。 n ( 2) 用 Sp
48、_unbindrule解 除 規(guī) 則 的 綁 定 n 語(yǔ) 法 為 : sp_unbindrule objname = object_name,futureonly n 4. 刪 除 規(guī) 則 n 語(yǔ) 法 為 : DROP RULE rule_name ,.nn 【 注 意 】 在 刪 除 一 個(gè) 規(guī) 則 前 , 必 須 先 將 與 其 綁 定 的 對(duì) 象 解 除綁 定 。 6.2 完 整 性 控 制n 6.2.6 默 認(rèn) 值n 默 認(rèn) 值 ( Default) 也 稱 缺 省 值 , 是 往 用 戶 輸 入 記 錄 時(shí) 沒(méi)有 指 定 具 體 數(shù) 據(jù) 的 列 中 自 動(dòng) 插 入 的 數(shù) 據(jù) 。 默
49、 認(rèn) 值 對(duì) 象 與 ALTER TABLE 或 CREATE TABLE 命 令 操 作 表 時(shí) 用 DEFAULT選 項(xiàng) 指 定 的 默認(rèn) 值 功 能 相 似 , 但 默 認(rèn) 值 對(duì) 象 可 以 用 于 多 個(gè) 列 或 用 戶 自 定 義 數(shù)據(jù) 類 型 , 它 的 管 理 與 應(yīng) 用 同 規(guī) 則 有 許 多 相 似 之 處 。 表 的 一 列 或一 個(gè) 用 戶 自 定 義 數(shù) 據(jù) 類 型 也 只 能 與 一 個(gè) 默 認(rèn) 值 相 綁 定 。 n 1. 創(chuàng) 建 默 認(rèn) 值 n 用 CREATE DEFAULT 命 令 創(chuàng) 建 默 認(rèn) 值 , 用 于 在 當(dāng) 前 數(shù) 據(jù) 庫(kù)中 創(chuàng) 建 默 認(rèn) 值
50、 對(duì) 象 。 其 語(yǔ) 法 如 下 :n CREATE DEFAULT default_name AS constant_expressionn 其 中 constant_expression 子 句 是 默 認(rèn) 值 的 定 義 , 可 以 是 數(shù) 學(xué) 表 達(dá)式 或 函 數(shù) , 也 可 以 包 含 表 的 列 名 或 其 它 數(shù) 據(jù) 庫(kù) 對(duì) 象 。 6.2 完 整 性 控 制n 【 案 例 6-17】 創(chuàng) 建 生 日 默 認(rèn) 值 birthday_defa。n CREATE DEFAULT birthday_defa AS 1978-1-1 n 2. 默 認(rèn) 值 的 綁 定 與 松 綁 n (
51、1) 用 存 儲(chǔ) 過(guò) 程 Sp_bindefault 綁 定 默 認(rèn) 值 , 語(yǔ) 法 如 下 :n sp_bindefault defname = default,n objname = object_namen , futureonlyn ( 2) 用 存 儲(chǔ) 過(guò) 程 Sp_unbindefault解 除 默 認(rèn) 值 的 綁 定 ,語(yǔ) 法 :n Sp_unbindefault objname = object_namen ,futureonly n 3. 刪 除 默 認(rèn) 值n 可 以 在 企 業(yè) 管 理 器 中 選 擇 默 認(rèn) 值 , 單 擊 右 鍵 , 從 快 捷 菜 單 中 選 擇 “
52、刪 除 ” 選 項(xiàng) 刪 除 默 認(rèn) 值 。 也 可 使 用 DROP DEFAULT 命 令 刪 除 當(dāng) 前 數(shù)據(jù) 庫(kù) 默 認(rèn) 值 。n 其 語(yǔ) 法 為 : DROP DEFAULT default_name ,.nn 【 注 意 】 在 刪 除 一 個(gè) 默 認(rèn) 值 前 須 先 將 與 其 綁 定 的 對(duì) 象 解 除 綁 定 6.3 并 發(fā) 控 制 與 封 鎖6.3.1 并 發(fā) 操 作 帶 來(lái) 的 問(wèn) 題n 為 了 充 分 利 用 數(shù) 據(jù) 資 源 , 經(jīng) 常 進(jìn) 行 并 行 存 取 , 就 會(huì) 發(fā) 生 多 用 戶并 發(fā) 存 取 同 一 數(shù) 據(jù) 塊 的 情 況 , 即 數(shù) 據(jù) 庫(kù) 的 并 行 操
53、 作 。 數(shù) 據(jù) 庫(kù) 并 發(fā) 控制 是 對(duì) 多 個(gè) 用 戶 程 序 并 行 存 取 的 控 制 機(jī) 制 , 目 的 是 避 免 數(shù) 據(jù) 的 丟 失修 改 、 無(wú) 效 數(shù) 據(jù) 的 讀 出 與 不 可 重 復(fù) 讀 數(shù) 據(jù) 現(xiàn) 象 的 發(fā) 生 , 從 而 保 持 數(shù)據(jù) 的 一 致 性 。6.3.2 事 務(wù)n 1 事 務(wù)n ( 1) 事 務(wù) 的 定 義n 數(shù) 據(jù) 庫(kù) 的 并 發(fā) 控 制 是 以 事 務(wù) 為 基 本 單 位 進(jìn) 行 的 。 事 務(wù) 是 數(shù) 據(jù) 庫(kù)系 統(tǒng) 中 執(zhí) 行 的 一 個(gè) 工 作 單 位 , 它 是 由 用 戶 定 義 的 一 組 操 作 序 列 。 一個(gè) 事 務(wù) 可 以 是 一 組
54、 SQL語(yǔ) 句 、 一 條 SQL命 令 或 整 個(gè) 程 序 , 一 個(gè) 應(yīng) 用 程序 可 以 包 括 多 個(gè) 事 務(wù) 。 n 在 SQL語(yǔ) 言 中 , 定 義 事 務(wù) 的 語(yǔ) 句 有 3條 :n BEGIN TRANSACTIONn COMMITn ROLLBACK 6.3 并 發(fā) 控 制 與 封 鎖n ( 2) 事 務(wù) 的 特 征n 事 務(wù) 是 由 有 限 的 數(shù) 據(jù) 庫(kù) 操 作 序 列 組 成 , 但 并 不 是 任 意 的 數(shù) 據(jù) 庫(kù)操 作 序 列 都 能 成 為 事 務(wù) , 為 了 保 護(hù) 數(shù) 據(jù) 的 完 整 性 , 一 般 要 求 事 務(wù) 具有 以 下 4個(gè) 特 征 : n 1)
55、原 子 性 ( Atomic) 。 各 事 務(wù) 為 不 可 分 割 的 工 作 單 位 , 執(zhí) 行時(shí) 應(yīng) 遵 守 “ 要 么 不 做 , 要 么 全 做 ” 的 原 則 , 不 允 許 事 務(wù) 部 分 完 成 。若 意 外 故 障 而 使 事 務(wù) 未 能 完 成 , 它 執(zhí) 行 的 部 分 結(jié) 果 應(yīng) 被 取 消 。n 2) 一 致 性 ( Consistency) 。 事 務(wù) 對(duì) 數(shù) 據(jù) 庫(kù) 的 功 能 是 從 一 個(gè) 一致 狀 態(tài) 轉(zhuǎn) 變 到 另 一 個(gè) 一 致 狀 態(tài) 。 所 謂 數(shù) 據(jù) 庫(kù) 的 一 致 狀 態(tài) 是 指 數(shù) 據(jù) 庫(kù)中 的 數(shù) 據(jù) 滿 足 完 整 性 約 束 。n 3) 隔
56、 離 性 ( Isolation) 。 如 果 多 個(gè) 事 務(wù) 并 發(fā) 地 執(zhí) 行 , 應(yīng) 像 各事 務(wù) 獨(dú) 立 執(zhí) 行 一 樣 , 各 事 務(wù) 的 執(zhí) 行 不 能 被 其 他 事 務(wù) 干 擾 。 并 發(fā) 控 制可 保 證 事 務(wù) 間 的 隔 離 性 。 n 4) 持 久 性 ( Durability) 。 指 一 個(gè) 事 務(wù) 一 旦 提 交 , 它 對(duì) 數(shù) 據(jù) 庫(kù)中 數(shù) 據(jù) 的 改 變 就 應(yīng) 該 是 持 久 的 , 即 使 數(shù) 據(jù) 庫(kù) 因 故 障 而 受 到 破 壞 ,DBMS也 應(yīng) 該 能 夠 恢 復(fù) 。n 上 述 4個(gè) 性 質(zhì) 的 英 文 術(shù) 語(yǔ) 的 第 一 個(gè) 字 母 為 ACID。
57、 故 稱 4個(gè) 性 質(zhì) 為事 務(wù) 的 ACID準(zhǔn) 則 。 6.3 并 發(fā) 控 制 與 封 鎖n 2 并 發(fā) 控 制 概 述n 事 務(wù) 是 數(shù) 據(jù) 庫(kù) 并 發(fā) 控 制 的 基 本 單 位 。 保 證 事 務(wù) ACID特 性 是 事 務(wù) 處 理 的重 要 任 務(wù) , 而 并 發(fā) 操 作 有 可 能 會(huì) 破 壞 其 ACID特 性 。 DBMS并 發(fā) 控 制 機(jī) 制 有 對(duì)并 發(fā) 操 作 進(jìn) 行 正 確 調(diào) 度 , 保 證 事 務(wù) 的 隔 離 性 更 強(qiáng) , 確 保 數(shù) 據(jù) 庫(kù) 的 一 致 性 。n 【 案 例 6-18】 以 飛 機(jī) 訂 票 系 統(tǒng) 說(shuō) 明 并 發(fā) 操 作 帶 來(lái) 的 數(shù) 據(jù) 不
58、一 致 的 問(wèn) 題 .n 拿 飛 機(jī) 訂 票 系 統(tǒng) 中 的 一 個(gè) 活 動(dòng) 序 列 ( 同 一 時(shí) 刻 讀 取 ) 為 例 ,分 4步 :n 甲 售 票 點(diǎn) ( 甲 事 務(wù) ) 讀 取 某 航 班 的 機(jī) 票 余 額 A, A=16;n 乙 售 票 點(diǎn) ( 乙 事 務(wù) ) 讀 取 同 一 航 班 機(jī) 票 余 額 A, A=16;n 甲 售 票 點(diǎn) 賣 出 一 張 機(jī) 票 , 修 改 A=A-1, 即 A=15, 寫 入 數(shù) 據(jù) 庫(kù) ;n 乙 售 票 點(diǎn) 也 賣 出 一 張 機(jī) 票 , 修 改 A=A-1, 即 A=15, 寫 入 數(shù) 據(jù) 庫(kù) .n 結(jié) 果 : 賣 出 兩 張 票 , 數(shù) 據(jù)
59、庫(kù) 中 機(jī) 票 余 額 只 減 少 1。 n 造 成 數(shù) 據(jù) 庫(kù) 的 不 一 致 性 是 由 并 發(fā) 操 作 引 起 的 。 在 此 情 況 下 , 對(duì) 甲 、 乙事 務(wù) 的 操 作 序 列 是 隨 機(jī) 的 。 若 按 上 面 的 調(diào) 度 序 列 執(zhí) 行 , 甲 事 務(wù) 的 修 改 被 丟失 , 因 為 第 4步 中 乙 事 務(wù) 修 改 A并 寫 回 后 覆 蓋 了 甲 事 務(wù) 的 修 改 。 6.3 并 發(fā) 控 制 與 封 鎖n 如 果 沒(méi) 有 鎖 定 且 多 個(gè) 用 戶 同 時(shí) 訪 問(wèn) 一 個(gè) 數(shù) 據(jù) 庫(kù) , 則 當(dāng) 多 個(gè) 事 務(wù)同 時(shí) 使 用 相 同 數(shù) 據(jù) 時(shí) 可 能 會(huì) 發(fā) 生 問(wèn)
60、 題 。 并 發(fā) 操 作 帶 來(lái) 的 數(shù) 據(jù) 不 一 致性 包 括 :n ( 1) 丟 失 更 新n 當(dāng) 多 個(gè) 事 務(wù) 選 擇 同 一 行 , 然 后 基 于 最 初 選 定 的 值 更 新 該 行 時(shí) ,會(huì) 發(fā) 生 丟 失 更 新 問(wèn) 題 。 每 個(gè) 事 務(wù) 都 不 知 道 其 它 事 務(wù) 的 存 在 。 最 后 的更 新 將 重 寫 由 其 它 事 務(wù) 所 做 的 更 新 , 這 將 導(dǎo) 致 數(shù) 據(jù) 丟 失 。n ( 2) 讀 “ 臟 ” 數(shù) 據(jù) ( 臟 讀 )n 讀 “ 臟 ” 數(shù) 據(jù) 是 指 事 務(wù) T1修 改 某 一 數(shù) 據(jù) , 并 將 其 寫 回 磁 盤 , 事務(wù) T2讀 取 同
61、 一 數(shù) 據(jù) 后 , T1由 于 某 種 原 因 被 撤 消 , 而 此 時(shí) T1把 已 修 改過(guò) 的 數(shù) 據(jù) 又 恢 復(fù) 原 值 , T2讀 到 的 數(shù) 據(jù) 與 數(shù) 據(jù) 庫(kù) 的 數(shù) 據(jù) 不 一 致 , 則 T2讀 到 的 數(shù) 據(jù) 就 為 “ 臟 ” 數(shù) 據(jù) , 即 不 正 確 的 數(shù) 據(jù) 。 n ( 3) 不 可 重 復(fù) 讀n 當(dāng) 事 務(wù) T1讀 取 數(shù) 據(jù) 后 , 事 務(wù) T2執(zhí) 行 更 新 操 作 , 使 T1無(wú) 法 讀 取 前一 次 結(jié) 果 。 不 可 重 復(fù) 讀 包 括 3種 情 況 : 事 務(wù) T1讀 取 某 一 數(shù) 據(jù) 后 , T2對(duì)其 做 了 修 改 , 當(dāng) T1再 次 讀 該
62、 數(shù) 據(jù) 后 , 得 到 與 前 一 不 同 的 值 。 6.3 并 發(fā) 控 制 與 封 鎖n 產(chǎn) 生 數(shù) 據(jù) 的 不 一 致 性 的 主 要 原 因 是 并 發(fā) 操 作 破 壞 了 事 務(wù) 的隔 離 性 。 其 現(xiàn) 象 如 表 6-4所 示 。n 表 6-4 數(shù) 據(jù) 庫(kù) 并 發(fā) 操 作 中 3種 數(shù) 據(jù) 不 一 致 性 現(xiàn) 象 T1 T2 T1 T2 T1 T2 讀 A=16 讀 A=16 A=A-1寫 回 A=15 A=A-1 寫 回 A=15 讀 A=50讀 B=100求 和 =150 讀 B=100 讀 B=B*2 寫 回 B=200 讀 A=50讀 B=200求 和 250(演 算
63、不 對(duì) ) 讀 C=100C=C*2寫 回 C 讀 C=200 ROLLBACKC恢 復(fù) 為 100( a) 丟 失 更 新 ( b) 不 可 重 復(fù) 讀 ( c) 讀 “ 臟 ” 數(shù) 據(jù) 6.3 并 發(fā) 控 制 與 封 鎖n 6.3.3 封 鎖 技 術(shù)n 并 發(fā) 控 制 措 施 的 本 質(zhì) 是 用 正 確 方 式 調(diào) 度 并 發(fā) 操 作 , 使 一 個(gè) 用 戶事 務(wù) 的 執(zhí) 行 不 受 其 它 事 務(wù) 干 擾 , 從 而 避 免 造 成 數(shù) 據(jù) 的 不 一 致 性 。 并發(fā) 控 制 的 主 要 技 術(shù) 是 封 鎖 (locking).如 在 飛 機(jī) 訂 票 例 中 , 甲 事 務(wù) 要修 改
64、A,若 在 讀 出 A前 先 鎖 住 A,其 它 事 務(wù) 不 能 再 讀 取 和 修 改 A, 直 到 甲修 改 并 寫 回 A后 解 除 了 對(duì) A的 封 鎖 為 止 , 這 樣 甲 就 不 會(huì) 丟 失 修 改 。n 事 務(wù) T在 對(duì) 某 個(gè) 數(shù) 據(jù) 對(duì) 象 (表 、 記 錄 等 )操 作 之 前 ,先 向 系 統(tǒng) 發(fā) 出請(qǐng) 求 ,對(duì) 其 加 鎖 。 加 鎖 后 T對(duì) 數(shù) 據(jù) 對(duì) 象 有 一 定 的 控 制 (具 體 由 封 鎖 類 型決 定 ),在 事 務(wù) T釋 放 前 ,其 它 事 務(wù) 不 能 更 新 .基 本 的 封 鎖 類 型 有 兩 種 :n ( 1) 排 它 鎖 ( X鎖 、 寫
65、 鎖 )n 若 事 務(wù) T對(duì) 數(shù) 據(jù) 對(duì) 象 A加 上 X鎖 , 則 只 允 許 T讀 取 和 修 改 A, 其 它 任何 事 務(wù) 不 能 對(duì) A加 任 何 類 型 的 鎖 , 直 到 T釋 放 A上 的 鎖 。 以 保 證 其 它 事務(wù) 在 T釋 放 A上 的 鎖 前 不 再 讀 取 和 修 改 A。 n ( 2) 共 享 鎖 ( S鎖 、 讀 鎖 )n T對(duì) 數(shù) 據(jù) 對(duì) 象 A加 上 S鎖 , 則 T可 以 讀 A但 不 能 修 改 A, 其 它 事 務(wù) 只能 再 對(duì) A加 S鎖 , 而 不 能 加 X鎖 , 直 到 T釋 放 A上 的 S鎖 。 保 證 了 在 T對(duì) A加 S鎖 過(guò) 程
66、中 其 它 事 務(wù) 對(duì) A只 能 讀 , 不 能 修 改 。 6.3 并 發(fā) 控 制 與 封 鎖n 6.3.4并 發(fā) 操 作 的 調(diào) 度n 系 統(tǒng) 對(duì) 并 行 操 作 的 調(diào) 度 是 隨 機(jī) 的 , 不 同 的 調(diào) 度 可 能 會(huì) 產(chǎn) 生 不 同結(jié) 果 。 如 果 一 個(gè) 事 務(wù) 運(yùn) 行 中 不 同 時(shí) 運(yùn) 行 其 他 事 務(wù) , 則 可 認(rèn) 為 該 事 務(wù)的 運(yùn) 行 結(jié) 果 是 正 常 的 或 預(yù) 期 的 , 因 此 將 所 有 事 務(wù) 串 行 起 來(lái) 的 調(diào) 度 策略 是 正 確 的 。 雖 然 以 不 同 的 順 序 串 行 執(zhí) 行 事 務(wù) 也 可 能 會(huì) 產(chǎn) 生 不 同 的結(jié) 果 , 但 由 于 不 會(huì) 將 數(shù) 據(jù) 庫(kù) 置 于 不 一 致 狀 態(tài) , 所 以 都 可 認(rèn) 為 是 正 確的 。 由 此 可 得 結(jié) 論 : 幾 個(gè) 事 務(wù) 的 并 行 執(zhí) 行 是 正 確 的 , 當(dāng) 且 僅 當(dāng) 其 結(jié)果 與 按 某 一 次 序 串 行 地 執(zhí) 行 它 們 的 結(jié) 果 相 同 。 這 種 并 行 調(diào) 度 策 略 稱為 可 串 行 化 (serializable)的 調(diào) 度 。 可 串
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案