【云駐共創】華為云數據庫之數據庫原理及應用課程11、數據庫系統控制
前言

本文主要介紹內容如下:
事務
恢復技術
并發控制
數據庫安全
本文內容目標是可以通過以上技術保障數據庫運行過程中的安全性以及數據的準確性。
【云端實踐】地址:https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXDX012+Self-paced/about
一、事務
1、什么是事務?
在數據庫管理系統中,事務(Transaction)是用戶定義的一個數據庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。事務是數據庫管理系統提供的控制數據操作的一種機制,它將一系列的數據庫操作組合在一起,作為一個整體進行操作和控制,以便數據庫管理系統能夠提供數據一致性狀態轉換的保證。
2、ACID——事務四大特性
原子性(Atomicity)
原子性其實非常好理解,我認為它指的就是一種完整性,就是說任何一個具備原子性的事務只有兩種狀態:完成操作 和 未操作。原子性保證事務的一切操作要么一起成功要么一起失敗。原子性的事務一旦開始就一直運行到結束,它不會被線程調度機制中斷。如果遇到強制性中斷,就會全部回滾到最初未操作的狀態。還有一種說法是“原子操作(atomic operation)是不需要synchronized"。
一致性(Consistency)
這個是數據庫事物的核心,它是數據庫最基本的特性。這條特性看起來簡單,但是理解起來還是比較復雜的。
它的書面定義是:數據庫一致性(Database Consistency)是指事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。
它分為兩個方面:一致讀 和 一致寫
一致讀:事務讀取數據只能從一個狀態中讀取,不能從2個或者2個以上狀態讀取。
一致寫:事務執行的數據變更只能基于上一個一致的狀態,且只能體現在一個狀態中。
具體解釋請認真參看并理解 知乎 如何理解數據庫事務中的一致性的概念?徐志斌的回答
隔離性(Isolation)
多個事務并發訪問時,事務之間是隔離的,一個事務不應該影響其它事務運行效果。
在并發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間。由并發事務所做的修改必須與任何其他并發事務所做的修改隔離。事務查看數據更新時,數據所處的狀態要么是另一事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看到中間狀態的數據。
事務最復雜問題都是由事務隔離性引起的。完全的隔離性是不現實的,完全的隔離性要求數據庫同一時間只執行一條事務,這樣會嚴重影響性能。
持久性(Durability)
就是說任何執行成功的事務修改后的數據都要保證永久的保存在數據庫系統中,能夠時刻記錄系統的狀態,并且保證發生故障后能夠恢復。
3、調度
一組事務執行的基本步驟,或者說的讀、寫、其它控制操作如加鎖、解鎖的一種執行順序稱為對這組事務的一個調度。事務調度是要保證事務ACID屬性。
begin transaction sql... ... sql... commit end transaction
二、恢復技術
1、事務的故障
事務故障是某事務在運行過程中由于種種原因未運行至正常終止點就天折了,這意味著事務沒有達到預期的終點,因此數據庫可能處于不正確的狀態。
引發事務故障的常見原因
輸入數據有誤;
違反了某些完整性限制;
某些應用程序出錯;
并行事務發生死鎖。
下面來介紹一個重要概念:死鎖
死鎖是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統
處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。
2.事務故障恢復
在不影響其他事務運行的情況下,強行回滾該事務,使得該事務好像根本沒有啟動一樣恢復機制負責管理事務中止,典型的辦法是維護一個中止日志(log)。
系統故障是造成系統停止運轉的任何事件,使得系統要重新啟動。
3.引發系統故障的常見原因
(1)操作系統或DBMS代碼錯誤;
(2)操作員操作失誤;
(3)特定類型的硬件錯誤(如CPU故障) ;
(4)突然停電。
4.系統故障恢復
尚未完成的事務可能結果已經送入數據庫,已經完成的事務可能有一部分留在緩存區,尚未寫回到物理數據庫中。系統重新啟動后,恢復子系統需要撤銷所有未完成
的事務,還需要重做所有已經提交的事務,以將數據庫真正恢復到一致狀態。系統故障可以由系統自動恢復,或可以利用基于日志文件的數據恢復技術。
5.介質故障
介質故障是使存儲在外存中的數據部分丟失或全部丟失;介質故障比前兩類故障的可能性小得多,但破壞性大得多。
引發介質故障的常見原因
(1)硬件故障;
(2)磁盤損壞;
(3)磁頭碰撞;
(4)操作系統的某種潛在錯誤;
(5)瞬時強磁場干擾。
6.介質故障恢復
介質故障將破壞存放在外存的數據庫中的部分或全部數據,因此,必須借助DBA的幫助,由DBA一起恢復。
介質故障破壞的是磁盤上的部分(或全部)物理DB,甚至會破壞日志文件,而且也會破壞正在存取的物理數據的所有事務(它與事務故障和系統故障相比,對數據庫的破壞性可能最大),最好用后備副本和日志文件進行數據庫恢復,也可作數據庫鏡像進行數據庫恢復。
三、并發控制
1.概述
數據庫管理系統并發調度所依據的可串行性思想與行為現象,在生活中比比皆是。如飛機航班調度、智能交通的控制問題等,都是用并發調度的思想來解決的。
為什么要進行并發調度
數據庫是一個“共享資源”,可供多個用戶共享。有時,在同時刻并發運行的事務就可以達到數百個。如果是單處理機系統,事務的并行實際上是這些事務的并行操
作輪流交叉運行,稱之為“交叉并發方式”,減少了處理機的空閑時間,提高了系統的效率。如果是多處理機系統,每個處理機可以運行一個事務,多個處理機可以同時運行多個事務,實現多個事務真正的并行運行,稱為“同時并發方式”。
2.串行化調度
串行化(Serialization)是計算機科學中的一個概念,串行化也叫序列化。 并行化與串行化是順序處理的方式上的不同,如果并發執行的控制完全由操作系統負責,許多調度都是可能的,包括像上述調度那樣使數據庫處于不一致狀態的調度。
SQL規定的隔離性級別如下:
(1)可串行化(Serializable) :通常保證可串行調度。然而,正如我們將要解釋的,一些數據庫系統對該隔離級別的實現在某種情況下,允許非可串行化執行。
(2)可重復讀(Repeatable read) :只允許讀取已提交的數據,而且在一個事務兩次讀取一個數據項期間,其它事務不能更新該數據。但該事務不要求與其它事務可串行化。
例如,當一個事務在查找滿足某些條件的數據時,他可以找到一個已提交事務插入的一些數據,但可能找不到該事務插入的其它數據。
(3)已提交讀(Read committed) :只允許讀取已提交的數據,但不要求可重復讀.比如在事務兩次讀取一個數據項期間,另一個事務更新該數據并提交。
(4)未提交讀(Read uncommitted) :允許讀取未提交數據。這是SQL允許的最低一致性級別。
3.封鎖定義
“鎖”是控制并發的一種手段,每一數據元素都有唯一的鎖, 每一事務讀寫數據元素前,要獲得鎖。如果被其他事務持有該元素的鎖,則要等待。事務處理完成后要釋放鎖。
封鎖是實現并發控制的一個非常重要的技術。
4.封鎖類型
數據庫管理系統通常提供多種類型的封鎖,包括:
(1)排它鎖(eXclusive lock, X鎖),又稱為寫鎖:若事務T對數據對象A加上X鎖則只允許T讀取和修改A,其它任何事務都不能再對A加任何類型的鎖,直到T釋放A上的
鎖(保證其他事務在T釋放A上的鎖之前不能再讀取和修改A )。
(2)共享鎖(Share lock,S鎖) 又稱為讀鎖:若事務T對數據對象A加上S鎖,則只允許T讀取A,但不允許修改A ,其它任何事務只能再對A加S鎖,而不能加X鎖,直到T釋
放A上的S鎖。(保證其他事務可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改)
5.封鎖協議及封鎖粒度
兩段封鎖協議(2PL: two-Phase Locking protocal)。讀寫數據之前要獲得鎖。每個事務中所有封鎖請求先于任何一個解鎖請求兩階段:加鎖段,解鎖段。加鎖段中不能有解鎖操作,解鎖段中不能有加鎖操作。
6.并發調度的可串行性
幾種常見的操作,并發控制策略如下 幾種常見的操作,并發控制策略如下
(1)讀-讀并發控制:并發的讀讀事務,是不會、也沒有必要相互阻塞的。由于沒有 修改數據庫,因此每個讀事務使用自己的快照,就能保證查詢結果的一致性和隔離性;同 修改數據庫,因此每個讀事務使用自己的快照,就能保證查詢結果的一致性和隔離性;同時,對于底層的頁面和元組,只涉及讀操作,只需要對它們加共享鎖即可,不會發生鎖等 時,對于底層的頁面和元組,只涉及讀操作,只需要對它們加共享鎖即可,不會發生鎖等 待的情況。
(2)讀寫并發控制:并發的讀、寫事務,并發控制基于MVCC和快照機制,彼此之間不會存在事務級的長時間阻塞。相比之下,采用兩階段鎖協議,由于讀、寫均在記錄的 間不會存在事務級的長時間阻塞.相比之下,采用兩階段鎖協議,由于讀、寫均在記錄的 同一個版本上操作,因此排在鎖等待隊列后面的事務至少要阻塞到持鎖者事務提交之后才 同一個版本上操作,因此排在鎖等待隊列后面的事務至少要阻塞到持鎖者事務提交之后才 能繼續執行。另一方面,為了保證底層物理頁面和元組的讀、寫原子性,在實際操作頁面能繼續執行。另一方面,為了保證底層物理頁面和元組的讀、寫原子性,在實際操作頁面
和元組時,需要暫時加上相應對象的共享鎖或排他鎖,在完成對象的讀、寫操作之后,就 和元組時,需要暫時加上相應對象的共享鎖或排他鎖,在完成對象的讀、寫操作之后,就可以放鎖。 可以放鎖。
(3)寫-寫并發控制:并發的讀寫事務,工作在同一條記錄的不同版本上(讀老版本,寫新版本),從而互不阻塞,但是對于并發的寫寫事務,它們都必須工作在最新版本的元組上,因此如果并發的寫寫事務涉及同一條記錄的寫操作,那么必然導致事務級的阻塞。
寫-寫并發的場景有以下6種:插入插入并發、插入刪除并發、插入-更新并發、刪除-刪除并發、刪除更新并發、更新-更新并發,不同的操作并發控制都不盡相同。
四、數據庫安全
1.概述
隨著數字化的不斷發展,數據信息的流量劇增,數據信息的價值也越來越大,當人們享受“數據”帶來的紅利時,也面臨著隱私泄露、信息篡改、數據丟失等安全風險。由此,數據的安全保密成為數據庫管理系統(DBMS)是數據庫系統的核心任務之一,它的安全性也成為DBMS系統的一個很重要的性能指標。
1.數據庫安全問題
數據庫的安全機制,就是要建立一個數據庫的“安保屏障”,阻止各種不安全問題的出現,通常要考慮以下技術安全、管理安全、政策法律安全三點。
2.安全級別
數據庫的安全級別通常分為: DBMS級,網絡級,OS級,用戶級和環境級,如圖所示。
數據庫安全性機制采用多層級控制,分為操作系統的保護,DBMS安全保護,數據庫加密,數據庫用戶標識與鑒別等安全層級,如圖所示。
3.安全機制
數據庫安全性控制的常用方法:用戶標識與鑒定,存取控制,視圖,審計,密碼存儲。
(1)用戶標識與鑒別(Identification & et Authentication) :是系統提供的最外層安全保護措施。其方法是系統提供一定的方式讓用戶標識自己的名字與身份,包括用戶標識與用戶鑒別2個層次,通過“用戶密碼”驗證身份,鑒別此用戶是否合法。
①軟件驗證技術:口令驗證、問/答驗證等技術;
②硬件驗證技術:指紋驗證、聲音識別驗證、手寫簽名驗證、手型幾何驗證和身份卡驗證等技術。
4.視圖機制
視圖機制把要保密的數據對無權存取這些數據的用戶隱藏起來,其主要的功能 視圖機制把要保密的數據對無權存取這些數據的用戶隱藏起來,其主要的功能在于提供數據獨立性。但視圖安全保護功能單獨執行往往不夠精細,有時不能達到在于提供數據獨立性。但視圖安全保護功能單獨執行往往不夠精細,有時不能達到應用系統的要求。
視圖機制與授權機制配合使用:首先用視圖機制屏蔽掉一部分保密數據,視圖上面再進一步定義存取權限,間接實現了支持存取的用戶權限定義。 。上面再進一步定義存取權限,間接實現了支持存取的用戶權限定義。
5.審計
審計功能是把用戶對數據庫的所有操作記錄自動記錄下來并放入審計日志(Audit Log) 中。DBA利用審計日志,找出非法存取數據的人,時間和內容。審計分為用戶級審計和系統級審計。
用戶級審計,針對自己創建的數據庫表或視圖進行審計記錄所有用戶對這些表或視圖的一切成功和(或) 不成功的訪問要求以及各種類型的SQL操作。
系統級審計( DBA設置),監測成功或失敗的登錄要求, 以及監測GRANT和REVOKE操作以及其他數據庫級權限操作。
6.數據加密
數據加密是防止數據庫中數據在存儲和傳輸中失密的有效手段,其思想方法是根據一定的算法將原始數據(術語為明文,Plain text) 變換為不可直接識別的格式(術語為密文,Cipher text)) ,不知道解密算法的人無法獲知數據的內容。常用的數據加密方法有如下幾種:
①替換方法:使用密鑰(Encryption Key)將明文中的每一個字符轉換為密文中的一個字符。
②置換方法:將明文的字符按不同的順序重新排列。
③混合方法:美國1977年制定的官方加密標準:數據加密標準(Data Encryption Standard,簡稱DES)。
④利用DBMS系統例程對數據庫中的數據進行加密。
2.用戶管理
用戶權限由兩方面要素構成,即數據對象和操作類型。
1.用戶權限
定義一個用戶的存取權限就是要定義這個用戶可以在哪些數據庫對象_上進行哪些類型的操作。在數據庫系統中,定義存取權限稱為授權。
授予數據庫權限時,<權限類型>可以指定為以下值,如表所示。
2.授權策略
典型的自主存取控制(DAC)授權策略包括以下三種:
(1)集中管理策略:只允許某些特權用戶授予/收回其他用戶對客體(基本表、索引、視圖等)的訪問權限。
(2)基于擁有權的管理策略:只允許客體的創建者授予/收回其他用戶對客體(基本表、索引、視圖等)的訪問權限。
(3)非集中管理策略:在客體擁有者的認可下,允許一些用戶授予/收回其他用戶對客體(基本表、索引、視圖等)的訪問權限。
3.用戶授權操作命令
大型數據庫管理系統幾乎都支持都會提供DAC支持,它是通過SQL的GRANT語
句和REVOKE語句實現。
語句格式:
GRANT priv_ type [(column_ list)] ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password'] [, user[IDENTIFIED BY [PASSWORD] 'password']] ... [WITH with_ option [with option].]J
功能:將指定操作對象的指定操作權限授予指定用戶。
在SQL中,用戶權限的收回是通過REVOKE語句實現。
語句格式:
REVOKE priv_ type [(column list).. ON database.table FROM user [, user].
功能:將授權給指定用戶的指定操作對象的指定操作權限收回。
幾點說明:
(1) priv_ type參數表示權限的類型;
(2) column list 參數表示權限作用于哪些列上,沒有該參數時作用于整個表上;
(3) user 參數由用戶名和主機名構成,格式為“username @ 'hostname'"。
例如:回收用戶【dbadmin】對表【student】的select操作權限。
revoke select no student from dbadmin
3.數據備份
在數據庫中,為了維護數據安全性,數據備份是必不可少的。GaussD B(forMySQL)對數據進行備份的方式有自動備份(事務備份)和手動備份等。
1.自動備份
GaussD B(for MySQL)是一個主備的結構,數據存儲采用的是共享存儲機制,它的特點就是它極致可靠,能做到數據的零丟失。數據一旦進行更新或存儲, 就是一個三備份,如果出現故障,由于三備份,它的故障能進行閃恢復。GaussD B(forMySQL)允許用戶根據數據處理需求設置自動備份參數。
2.手動備份
GaussDB(for MySQL)允許用戶將數據庫指定不同的選項進行備份。它實用程序靈活,快速,可執行高級備份,并接受各種命令行參數,用戶可通過這些參數來更改備份數據庫的方式。
3.備份/恢復數據庫
GaussDB(for MySQL)提供了直接進行數據庫備份的交互方式,用戶通過系統功能選項,可以很方便地實現數據庫備份操作,另外,也支持對已經備份的數據庫進行恢復。
4.備份數據庫表
語句格式:
select * into new_table_name from old_tablename;
功能:備份數據庫表。
5.數據庫導出
GaussDB(for MySQL)的導入導出操作,使得數據的形態很多元化,大大地提升了數據的可用性,并且可以導出SQL和CSV格式類型的文件。
本文整理自華為云社區【內容共創】活動第15期。
https://bbs.huaweicloud.com/blogs/345822
任務27:華為云數據庫之數據庫系統控制
上云必讀 云數據庫 MySQL 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。