云溪云原生分布式数据库安全功能以及实现介绍
一、數據庫安全功能
數據庫安全性,是指保護數據庫以防止不合法操作使用,造成的數據泄露、更改或者破壞。系統保護措施是否有效,是數據庫系統的主要技術指標之一。
數據庫相關的安全功能,主要包括用戶身份鑒別、多層訪問控制、審計和數據加密等技術。下面是數據庫安全保護的一個訪問控制流程圖:
1.? 用戶身份鑒別
用戶身份鑒別是數據庫管理系統提供的最外層安全保護措施。每個用戶在系統中都有一個唯一的用戶標識,由用戶名和用戶標識號(UID)兩部分組成,其中UID 在系統的整個生命周期內是唯一的。
數據庫內部記錄著所有合法用戶的標識,系統鑒別則是指由數據庫提供一定的方式讓用戶標識自己的名字或身份。每次用戶訪問數據庫時,都由系統進行核對,通過鑒定后才提供使用數據庫管理系統的權限。用戶身份鑒別的方法有很多種,而且在一個系統中往往是多種方法相結合,以獲得更強的安全性。常用的用戶身份鑒別方法有以下幾種:
靜態口令鑒別:
這種方式是當前常用的鑒別方法。靜態口令一般由用戶自己設定,鑒別時只要按要求輸入正確的口令,系統將允許用戶使用數據庫管理系統。這些口令是靜態不變的,很容易被破解,而一旦被破解,非法用戶就可以冒充該用戶使用數據庫。因此這種方法雖然簡單,但容易被攻擊,安全性較低。
動態口令鑒別:
它是目前較為安全的鑒別方式。這種方式的口令是動態變化的,每次鑒別時均使用動態產生的新口令登錄數據庫管理系統,即采用一次一密的方法,常用的方式如短信密碼和動態令牌方式。與靜態口令鑒別相比,這種認證方式增加了口令被竊取或破解的難度,安全性相對高一些。
生物特征鑒別:
它是一種通過生物特征進行認證的技術,其中,生物特征是指生物體唯一具有的,可測量、識別和驗證的穩定生物特征,如指紋、虹膜和掌紋等。這種方式通過采用圖像處理和模式識別等技術實現了基于生物特征的認證,與傳統的口令鑒別相比,無疑產生了質的飛越,安全性較高。
智能卡鑒別:
智能卡是一種不可復制的硬件,內置集成電路的芯片,具有硬件加密功能。智能卡由用戶隨身攜帶,登錄數據庫管理系統時用戶將智能卡插入專用的讀卡器進行身份驗證。由于每次從智能卡中讀取的數據是靜態的,通過內存掃描或網絡監聽等技術還是可能截取到用戶的身份驗證信息,存在安全隱患。因此實際應用中一般采用個人身份識別碼(PIN)和智能卡相結合的方式。
2.? 訪問控制
數據庫安全最重要的一點就是確保只授權給有資格的用戶訪問數據庫的權限,同時令所有未被授權的人員無法接近數據,這主要通過數據庫系統的訪問控制機制實現。數據庫系統一般提供兩種訪問控制機制,分別是自主訪問控制和強制訪問控制。
2.1?自主訪問控制(Discretionary Access Control——DAC)
自主訪問控制也就是常提到的權限控制,用戶對于不同的數據庫對象有不同的讀寫權限,不同的用戶對同一對象也有不同的權限,且用戶可將自身擁有的讀寫權限轉授給其他用戶。因此自主訪問控制靈活性較高。權限控制通過GRANT語句向用戶授權,REVOKE語句撤銷權限。
2.2??強制訪問控制(Mandatory Access Control——MAC)
自主訪問控制 (DAC) 能夠通過授權機制有效地控制對敏感數據的讀寫。但是由于用戶對數據的讀寫限是“自主”的,用戶可以自由地決定將數據的讀寫權限授予何人,以及決定是否也將授權能力授予別人。但在這種授權機制下,可能存在數據的“無意泄露”。
在強制訪問控制中,數據庫管理系統所管理的全部實體被分為主體和客體兩大類。主體是系統中的活動實體,既包括數據庫管理系統所管理的實際用戶,也包括代表用戶的各進程。客體是系統中的被動實體,是受主體操縱的,包括文件、基本表、索引、視圖等。對于主體和客體,數據庫管理系統為它們每個實例指派一個敏感度標記。
主體的敏感度標記稱為許可證級別,客體的敏感度標記稱為密級。對于任意一個數據庫對象,只有具有合法許可證的用戶才可以讀寫。強制訪問控制機制就是通過對比主體的敏感度標記和客體的敏感度標記,來確定主體是否能夠操作客體。
訪問規則一般基于以下兩種讀寫規則,分別是保密性規則和完整性規則:
? ?保密性規則
·? 僅當主體的許可證級別高于或者等于客體的密級時,該主體才能讀取相應的客體。(下讀)
·? 僅當主體的許可證級別低于或者等于客體的密級時,該主體才能寫相應的客體。(上寫)
? ?完整性規則
·? 僅當主體的許可證級別低于或者等于客體的密級時,該主體才能讀取相應的客體。(上讀)
·? 僅當主體的許可證級別高于或者等于客體的密級時,該主體才能寫相應的客體。(下寫)
自主訪問控制與強制訪問控制共同構成數據庫管理系統的安全機制,系統首先進行自主訪問控制檢查,對通過自主訪問控制檢查的允許讀寫的數據庫對象再由系統自動進行強制訪問控制檢查,只有兩者都通過檢查的主體,才能訪問數據庫對象。
3.? 審計
數據庫審計是對數據庫操作行為進行監管的系統,會實時記錄數據庫活動,把用戶對數據庫的所有操作自動記錄下來放入審計日志中。審計員可以利用審計日志監控數據庫中的各種行為,在發生數據庫安全事件后,找出非法讀寫數據的人、時間和內容等,為追溯、恢復、追責、定責提供依據。
對于針對數據庫的攻擊和風險操作等進行實時告警,以便管理人員及時作出應對措施,從而避免數據被破壞或者竊取。如果發現數據庫入侵行為、數據庫異常行為、數據庫違規訪問行為,即可通過短信、郵件、Syslog等多種方式實時告警。
同時,可以對用戶訪問數據庫行為的記錄進行分析,根據需求形成不同的審計報表,如綜合報表、合規性報表、專項報表、自定義報表等。
4.? 入侵檢測
SQL注入是比較常見的網絡攻擊方式之一,?web應用程序對用戶輸入數據的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程序中事先定義好的查詢語句的結尾添加額外的SQL語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙數據庫服務器執行非授權的任意語句,從而進一步得到相應的數據信息,非法訪問造成數據泄露。
5.? 數據加密
數據加密將數據庫中的數據,尤其是敏感數據,以加密的方式進行存儲,是防止數據庫數據在存儲和傳輸中泄露的有效手段。加密的基本思想是根據一定的算法將原始明文數據變換為不可直接識別的密文格式,從而使得不知道解密密鑰的人無法獲知數據的內容。
對于存儲加密,一般提供透明存儲加密方式。透明存儲加密是數據庫內核級加密保護方式,對用戶完全透明。而非透明存儲加密則是通過提供加密函數實現的。
數據庫透明加密技術是針對關系型數據庫保密需求應運而生的一種數據庫加密技術。所謂透明,是指對用戶來說無需更改現有的應用系統和操作習慣。當用戶通過應用程序訪問數據庫時,得到的是明文數據,而未授權的用戶通過非法手段訪問數據庫得到的都是密文數據。數據在應用程序中是明文,在數據庫中是密文。一旦離開使用環境,由于應用程序無法得到自動解密的服務而無法打開,從而起到保護數據庫中數據的效果。
與透明加密相對應的,是在應用系統中對數據進行加密,然后再存儲到數據庫中;需要真實數據的時候,再從數據庫中讀取密文,再解密出明文。用戶可以自由選擇需要加密的敏感信息,以及加密方式,而不是全部數據都加密。這樣只對部分數據加密可以提高數據庫訪問速度,有利于用戶在效率與安全性之間進行自主選擇。
6.? 推理控制:
推理控制處理的是強制訪問控制未解決的問題。例如,用戶利用列的函數依賴關系,從低安全等級信息推導出其無權訪問的高安全等級信息,進而導致信息泄露。
數據庫推理控制用來避免用戶利用其能夠訪問的數據推知更高密級的數據,即用戶利用其被允許的多次查詢的結果,結合相關的領域背景知識以及數據之間的約束,推導出其不能訪問的數據。在推理控制方面,常用的方法有基于函數依賴的推理控制和基于敏感關聯的推理控制等。
在《GB/T 20273-2019 信息安全技術 數據庫管理系統安全技術要求》中,安全功能不再要求提供推理控制。
二、開務數據庫的安全功能和實現
1.??登錄認證
1.1?證書認證
數字證書是指在傳輸通信中標志各方身份信息的一個數字認證,是由電子商務認證中心(簡稱為CA中心)所頒發的一種較為權威與公正的證書,用來識別對方的身份。同時,可以通過證書將傳輸的信息和數據進行加密解密等處理,保證了信息的完整性和安全性。
開務數據庫(原:云溪數據庫 )可以通過znbase cert命令創建CA證書和密鑰,再創建由CA證書簽名的節點和客戶端證書。當節點之間建立聯系,或者客戶端與節點建立聯系時,它們使用CA證書來驗證彼此的身份。
1.2?口令認證
為保護用戶信息,數據庫系統不直接將用戶明文口令存儲在數據庫內部,而是存儲口令進行加密后得到的密文,加密方式一般采取不可逆的摘要算法。
摘要算法是一種把任意長度的輸入通過哈希而產生長度固定的輸出的算法,主要特征是加密過程不需要密鑰,并且經過加密的數據無法被解密,只有輸入相同的明文數據經過相同的消息摘要算法才能得到相同的密文。
為增加密碼破解難度,一般會在口令加密時,采取加鹽措施,即在明文口令中加入額外信息,再進行哈希運算。校驗時取出鹽值,鹽跟明文口令進行相同的哈希運算操作,將得到的結果跟保存在數據庫內部中的密文進行對比。
目前,開務數據庫支持BCRYPT、SM3、PBKDF2,三種加密算法。
下圖為BCRYPT算法加密后得到的密文,其中包含了哈希次數、鹽值和哈希值。
1.3?客戶端認證
????客戶端認證用來設置允許訪問的IP地址,以及訪問的認證方式,通過集群參數server.host_based_authentication.configuration設置,格式與PostgreSQL的pg_hba.conf配置文件一致。
每條記錄指定一種連接類型、一個客戶端 IP 地址范圍(如果和連接類型相關)、一個數據庫名、一個用戶名以及對匹配這些參數的連接使用的認證方法。第一條匹配連接類型、客戶端地址、連接請求的數據庫和用戶名的記錄將被用于執行認證。
當前支持的認證方式有:
注意,不能在非SSL連接上定義認證規則。非SSL連接僅在非安全模式運行的數據庫上才可以使用。而在非安全模式下,所有認證邏輯完全失效。
2. 權限控制
上述表格為開務數據庫中已有的數據庫對象,及其對應的權限類型。
用戶的權限信息由三部分組成:用戶、對象和權限類型,在各數據庫對象的Descriptor下的PrivilegeDescriptor中,存放著用戶權限信息。結構如下圖所示。
用戶通過GRANT/REVOKE語句進行權限管理操作,可以把自己擁有的權限(需擁有授權能力,即grantable為true)授予給其他用戶。注意不能循環授權,如下圖所示,循環授權會導致級聯撤銷權限時,無法跟蹤權限來源。用戶只能將自己授予的權限撤銷,而不能撤銷其他用戶授予的權限。同時,撤銷權限時,會將授予出去的權限級聯撤銷。如圖中u1撤銷授予給u2的權限時,u2授予u3和u3授予u4的該權限,都會被撤銷。
在進行用戶的權限檢查時,以檢查表的權限為例,會先檢查是否能訪問到該表,即檢查database和schema上的USAGE權限,再檢查在該表上是否有對應權限。如果是列權限的話(SELECT, INSERT, UPDATE),還會檢查對應列上的權限。
權限檢查會檢查三部分的權限(即用戶的權限來源于三部分):(1)檢查該用戶是否是該對象的Owner;(2)檢查該用戶是否有對應權限;(3)檢查該用戶所屬的角色是否有對應權限。
數據庫對象Owner,是數據庫對象的擁有者,默認為數據庫對象的創建者,擁有該對象的所有權限,目前暫不支持更改Owner。在下圖所示的可更新視圖的INSERT操作中,用戶在INSERT可更新視圖時,會檢查該用戶是否有視圖的INSERT權限,及該視圖的Owner是否有表的INSERT權限。
3.? 審計
????目前已審計操作行為,包含大部分的DDL和DCL操作,具體操作類型詳見《云溪NewSQL分布式數據庫用戶手冊》第7.5章安全審計。
在打開審計開關,數據庫就會將對應的操作信息,記錄到審計記錄表和審計日志中,記錄信息包括用戶信息、操作時間、事件類型、被訪問資源的名稱、訪問結果等。而表級的DQL、DML操作,則需要使用ALTER TABLE table_name EXPERIMENTAL_AUDIT SET READ WRITE語句,打開該表的審計開關。
由于DQL、DML操作頻繁,將所有表的讀寫操作都自動審計,會生成大量審計記錄,因此由用戶自主控制需要審計的表。
????同時,審計支持郵件告警功能,在觸發對應操作的告警規則后,會向預先設置好的郵箱中發送相關郵件。對于該郵件告警系統,有時不需要將每一個事件都加入郵件告警的范圍中,此時可以使用禁用事件設置對無需告警的操作加以忽略。例如,SET CLUSTER SETTING audit.event.disable.list="drop_database,drop_table";
????此外,為了滿足用戶對SQL語句長度進行限制的需求,審計模塊中添加了有關SQL長度限制的功能,可通過audit.sql.length設置允許的最大SQL語句長度。
4.? SQL攔截
開務數據庫通過對用戶輸入進行詞法分析生成指紋規則,然后通過二分查找算法,在特征庫中進行匹配,匹配到則報SQL注入漏洞。
SQL攔截功能,由audit.sql.inject.bypass.enabled參數控制,用于設置是否繞過SQL注入攔截功能。值為true時,繞過SQL注入攔截功能,不對執行的SQL語句進行SQL注入檢測及攔截;值為false時,啟用SQL注入攔截功能。默認值為true。
在執行一條有SQL注入可能的語句時,如:SELECT (1 OR ( SELECT * FROM test));則會報出錯誤:sql with fingerprint of 'E(1&('。
總結
以上是生活随笔為你收集整理的云溪云原生分布式数据库安全功能以及实现介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络搭建一个小型局域网,如何建立一
- 下一篇: linux cmake编译源码,linu