(数据库系统概论|王珊)第四章数据库安全性-第二、三、四、五、六节:数据库安全性控制
文章目錄
- 一:用戶身份鑒別
- (1)靜態口令鑒別
- (2)動態口令鑒別
- (3)生物特征鑒別
- (4)智能卡鑒別
- 二:存取控制
- (1)自主存取控制DAC
- A:基本概念
- B:GRANT與REVOKE
- ①:GRANT
- ②:REVOKE
- ③:創建數據庫模式的權限
- C:數據庫角色
- ①:創建角色
- ②:給角色授權
- ③:將一個角色授予其他角色或用戶
- ④:角色權限的收回
- (2)強制存取控制MAC
- A:自主存取控制的隱患
- B:基本概念
- C:主體和客體及敏感度標記
- D:強制存取規則
- (3)DAC與MAC共同構成DBMS的安全機制
- 三:視圖
- 四:審計
- (1)基本概念
- (2)AUDIT語句和NOAUDIT語句
- 五:數據加密
- (1)基本概念
- (2)分類
- A:存儲加密
- B:傳輸加密
- ①:鏈路加密
- ②:端到端加密
數據庫相關的安全性措施主要有
- 用戶身份鑒別
- 多層存取控制
- 審計
- 視圖
- 數據加密
且它們是層層設置的,就像防火墻一樣
下圖是數據庫安全保護的一個存取控制流程
- 首先,數據庫管理系統對提出SQL訪問請求的數據庫用戶進行身份鑒別,防止不可信用戶使用系統
- 然后,在SQL處理層進行自主存取控制和強制存取控制,進一步還可以進行推理控制
- 為監控惡意訪問,可根據具體安全需求配置審計規則,對用戶訪問行為和系統關鍵操作進行審計
- 通過設置簡單入侵檢測規則,對異常用戶行為進行檢測和處理
- 在數據存儲層,數據庫管理系統不僅存放用戶數據,還存儲與安全有關的標記和信息(稱為安全數據),提供存儲加密功能等
一:用戶身份鑒別
用戶身份鑒別:每個用戶在系統中都有一個用戶標識。每個用戶標識由用戶名(user name)和用戶標識號(UID)組成。系統內部記錄著所有合法用戶的標識,每次用戶進入系統時,系統會核對用戶的身份,只有通過鑒定后才提供相關數據庫管理系統的權限
(1)靜態口令鑒別
靜態口令鑒別:一般由用戶自己設定,設定后就靜態不變。鑒別時只有輸入正確的口令即可。一般用戶習慣以自己的生日、電話等作為口令,極易被破解
- 該方式簡單,但是安全性極低
(2)動態口令鑒別
動態口令鑒別:該方式的口令是動態變化的,每次鑒別時均需使用動態產生的新口令登錄系統,例如常見的短信驗證碼
- 該方式相較于靜態口令,安全性較高
(3)生物特征鑒別
生物特征鑒別:生物特征是指生物體唯一具有的,可測量、識別和驗證的穩定生物特征,例如指紋、虹膜等等
- 該種方式相較于傳統的口令,安全性有了質的提升
(4)智能卡鑒別
智能卡鑒別:智能卡是一種不可復制的硬件,內置集成電路的芯片,具有硬件加密的功能。智能卡由用戶隨身攜帶,登錄數據庫管理系統時用戶將智能卡插入專用的讀卡器進行身份驗證
- 該方式可能會被一些監聽技術截取到信息,所以存在安全隱患
- 實際應用中采用PIN(個人身份識別碼)和智能卡結合的方式提高安全性
二:存取控制
存取控制:存取控制的目的就是確保只授權給有資格的用戶訪問數據庫的權限,其余人等無法接近數據。主要包括以下兩個部分
-
定義用戶權限:用戶對某一數據對象的操作權力稱為權限。某個用戶應該具有何種權限是個管理問題和政策問題,而不是技術問題。數據庫管理系統的功能是保證這些決定的執行。為此,數據庫管理系統必須提供適當的語言來定義用戶權限,這些定義經過編譯后存儲在數據字典中,被稱做安全規則或授權規則
-
合法權限檢查:每當用戶發出存取數據庫的操作請求后(請求一般應包括操作類型、操作對象和操作用戶等信息),數據庫管理系統查找數據字典,根據安全規則進行合法權限檢查,若用戶的操作請求超出了定義的權限,系統將拒絕執行此操作
而存取控制方法又分為以下兩類
- 自主存取控制(DAC):用戶對于不同的數據庫對象有不同的存取權限,不同的用戶對同一對象也有不同的權限,而且用戶還可將其擁有的存取權限轉授給其他用戶,因此自主存取控制非常靈活
- 強制存取控制(MAC):每一個數據庫對象被標以一定的密級,每一個用戶也被授予某一個級別的許可證。對于任意一個對象,只有具有合法許可證的用戶才可以存取,因此強制存取控制因此相對比較嚴格
(1)自主存取控制DAC
A:基本概念
自主存取控制DAC:SQL中自主存取控制主要是通過GRANT語句和REVOKE語句來實現的。是指用戶可以“自主”地決定將數據的存取權限授予何人、決定是否也將“授權”的權限授予別人
授權:用戶權限由數據庫對象和操作類型這兩個要素組成。定義一個用戶的存取權限就是定義這個用戶可以在哪些數據對象上進行哪些類型的操作。所謂授權就是指定義存取權限
- 在非關系系統中,用戶只能對數據進行操作,存取控制的數據庫對象也僅限于數據本身
- 在關系數據庫系統中,存取控制的對象不僅有數據本身(基本表中的數據、屬性列上的數據),還有數據庫模式(包括數據庫、基本表、視圖和索引的創建等)
下表就是關系數據庫中的主要存取權限
B:GRANT與REVOKE
SQL中使用GRANT和REVOKE語句向用戶授予或收回對數據的操作權限
①:GRANT
語法:格式如下,其含義為授予指定用戶對指定操作對象的指定操作權限。注意
- 如果指定了WITH GRANT OPTION子句,則獲得某種權限的用戶還可以把這種權限再授權給其他用戶。但不允許循環授權
- 如果未指定WITH GRANT OPTION子句,則獲得某種權限的用戶只能使用但無法傳播
- 如果要授權所有權限,可以寫ALL PRIVILEGES
- 如果所有用戶接受權限,可以寫PUBLIC
以下對象可以發出GRANT
- DBA
- 數據庫對象的創建者
- 已經擁有該權限的用戶
演示:
【例1】把查詢Student表的權限授權給用戶U1
GRANT SELECT ON TABLE Student TO U1;【例2】把對Student表和Course表的全部操作權限授予用戶U2和U3
GRANT ALL PRIVILEGES ON TABLE Student,Course TO U2,U3;【例3】把對表SC的查詢權限授予所有用戶
GRANT SELECT ON TABLE SC TO PUBLIC;【例4】把查詢Student表和修改學生學號的權限授給用戶U4
GRANT UPDATE(Sno),SELECT ON TABLE Student TO U4;【例5】把對表SC的INSERT權限授予U5用戶,并允許將此權限再授予其他用戶
GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION;【例6】U5可以把對表SC的INSERT權限授予其他用戶,例如U6
GRANT INSERT ON TABLE SC TO U6 WITH GRANT OPTION;②:REVOKE
語法:格式如下,注意
- 如果加入CASCADE,表示收回某用戶權限的同時也會把該用戶所有授權過用戶的權限一并收回
演示:
【例7】把用戶U4修改學生學號的權限收回
REVOKE UPDATE(Sno) ON TABLE Student FROM U4;【例8】收回所有用戶對表SC的查詢權限
REVOKE SELECT ON TABLE SC FROM PUBLIC;【例9】把用戶U5對SC表的INSERT權限收回,同時收回所有U5授權過的用戶的該權限
REVOKE INSERT ON TABLE SC FROM U5 CASCADE;③:創建數據庫模式的權限
前面所講到都是對數據的操作權限,而對創建數據庫模式類的數據庫對象的授權則由數據庫管理員在創建用戶時實現
語法:使用CREATE USER語句創建用戶,其格式如下。注意
- 只有系統的超級用戶才有權創建一個新的數據庫用戶
- 新創建的數據庫用戶有三種權限:CONNECT、RESCOURCE、DBA
這三種權限所能做的操作如下表
C:數據庫角色
數據庫角色:是被命名的一組與數據庫操作相關的權限,也即角色是權限的集合。在創建用戶時如果為其賦予某種角色,那么用戶就自動擁有了該數據庫角色所擁有的權限,從而省去了繁瑣的授權語句
①:創建角色
語法
②:給角色授權
語法
③:將一個角色授予其他角色或用戶
語法
④:角色權限的收回
語法
綜合演示:
【例1】通過角色來實現將一組權限授予一個用戶
//首先需要創建一個角色R1 CREATE ROLE R1; //接著使用GRANT語句,使角色R1擁有對Student表的權限 GRANT SELECT ,UPDATE,INSERT ON TABLE Student TO R1; //然后將這個角色授予用戶U1、U2、U3,使他們具有角色R1所擁有的全部權限 GRANT R1 TO U1,U2,U3 //最后,也可以通過R1來收回用戶的權限 REVOKE R1 FROM U1;(2)強制存取控制MAC
A:自主存取控制的隱患
自主存取控制(DAC)能夠通過授權機制有效地控制對敏感數據的存取。但是由于用戶對數據的存取權限是 “自主” 的,用戶可以自由地決定將數據的存取權限授予何人,以及決定是否也將“授權”的權限授予別人。在這種授權機制下,仍可能存在數據的“無意泄露”。比如,甲將自己權限范圍內的某些數據存取權限授權給乙,甲的意圖是僅允許乙本人操縱這些數據。但甲的這種安全性要求并不能得到保證,因為乙一旦獲得了對數據的權限,就可以將數據備份,獲得自身權限內的副本,并在不征得甲同意的前提下傳播副本。造成這一問題的根本原因就在于,這種機制僅僅通過對數據的存取權限來進行安全控制,而數據本身并無安全性標記
要解決這個問題,就需要對系統控制下的所有主客體實施強制存取控制策略
B:基本概念
強制存取控制:為保證更高程度的安全,對于任意對象,只有擁有合法許可證的用戶才可以存取,它不是用戶能直接感知和進行控制的。強制存取控制是對數據本身進行密級標記,無論數據如何復制,標記與數據是一個不可分的整體,只有符合密級標記要求的用戶才可以操縱數據
C:主體和客體及敏感度標記
在強制存取控制中,數據庫管理系統所管理的全部實體被分為主體和客體兩大類
主體:是系統中活動實體,即包括數據庫管理系統所管理的實際用戶,也包括代表各用戶的各進程
客體:是系統中的被動實體,是受主體操縱的,例如
- 文件
- 基本表
- 索引
- 視圖
對于主體和客體,數據庫管理系統為它們每個實例(值)指派一個敏感度標記(label),分為若干個級別
- 絕密(TS)
- 機密(S)
- 可信(C)
- 公開(P)
其中
TS≥S≥C≥PTS\geq S \geq C \geq PTS≥S≥C≥P
D:強制存取規則
主體的敏感度標記稱之為許可證級別;客體的敏感度標記稱之為密級。強制存取控制機制就是通過對比許可證級別和密級,依次確定主體是否能夠存取客體
當某一用戶(或某一主體)以標記label注冊入系統時,系統要求他對任何客體的存取必須遵循如下規則:
(3)DAC與MAC共同構成DBMS的安全機制
系統首先進行自主存取控制檢查,對通過自主存取控制檢查的允許存取的數據庫對象再由系統自動進行強制存取控制檢查,只有通過強制存取控制檢查的數據庫對象方可存取
三:視圖
視圖機制:通過視圖機制把要保密的數據對無權存取的用戶隱藏起來,從而自動對數據提供一定程度的安全保護
演示: 在某大學中,假定王平老師只能檢索計算機系學生的信息,系主任張明具有檢索和增刪改計算機系學生信息的所有權限
CREATE VIEW CS_Student AS SELECT * FROM Student WHERE Sdept='CS';GRANT SELECT ON CS_Student TO 王平;GRANT ALL PRIVILEGES ON CS_Student TO 張明;四:審計
(1)基本概念
審計:審計功能把用戶對數據庫的所有操作自動記錄下來放入審計日志(audit log)中。審計員可以利用審計日志監控數據庫中的各種行為,重現導致數據庫現有狀況的一系列事件,找出非法存取數據的人、時間和內容等。還可以通過對審計日志分析,對潛在的威脅提前采取措施加以防范
- 審計很費時間和空間,所以DBMS往往將審計功能設置為可選
- 可審計的事件有服務器事件、系統權限、語句事件及模式對象事件,還包括用戶鑒別、DAC和MAC
- 審計分為用戶級審計和系統級審計
- 審計既能記錄成功也即記錄失敗
(2)AUDIT語句和NOAUDIT語句
AUDIT語句和NOAUDIT語句分別用來設計審計功能和取消審計功能
演示:
AUDIT ALTER,UPDATE //對SC表結構或修改SC表數據的操作進行審計 ON SCNOAUDIT ALTER,UPDATE ON SC五:數據加密
(1)基本概念
數據加密:將明文轉換密文,從而無法獲知數據的內容,是防止數據庫中的數據在存儲和傳輸中失密的有效手段
(2)分類
A:存儲加密
非透明存儲加密: 通過多個加密函數實現的
透明存儲加密: 是內核級加密保護方式,對用戶完全透明
- 是數據在寫到磁盤時對數據進行加密,授權用戶讀取數據時再對其進行解密。由于數據加密對用戶透明,數據庫的應用程序不需要做任何修改,只需在創建表語句中說明需加密的字段即可。當對加密數據進行增、刪、改、查詢操作時,數據庫管理系統將自動對數據進行加、解密工作。基于數據庫內核的數據存儲加密、解密方法性能較好,安全完備性較高
B:傳輸加密
①:鏈路加密
對傳輸數據在鏈路層進行加密,它的傳輸信息由報頭和報文兩部分組成,前者是路由選擇信息,而后者是傳送的數據信息。這種方式對報文和報頭均加密
②:端到端加密
對傳輸數據在發送端加密,接收端解密。它只加密報文,不加密報頭。與鏈路加密相比,它只在發送端和接收端需要密碼設備,而中間節點不需要密碼設備,因此它所需密碼設備數量相對較少。但這種方式不加密報頭,從而容易被非法監聽者發現并從中獲取敏感信息
總結
以上是生活随笔為你收集整理的(数据库系统概论|王珊)第四章数据库安全性-第二、三、四、五、六节:数据库安全性控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BZOJ 3942] [Usaco20
- 下一篇: linux终端里CTRL-Z和CTRL-