MySQL表加密是雞肋嗎?
Mysql社區版從5.7.11開始支持基于表的數據加密方案,模塊名為keyring_file,支持加密整張表。這種是加密方式其實是基于文件加密的,一旦Mysqld讀取key啟動后,將會解密整張表的數據,在mysql服務內,讀取的數據都是解密后的,也就是說對客戶端而言是無感知的。而這個key是本地存放的,mysql服務擁有讀寫這個key的權限。

針對已有的項目面對客戶的安全審查需求,要對mysql進行表加密嗎?
表加密影響性能嗎?
對主從復制有沒有影響?加密后對業務系統有影響嗎?
對備份恢復有沒有性能影像?
大數據量情況下,加密解密耗時嗎?
加密后會增加存儲空間占用嗎?
數據庫的有些特性通常都是雙刃劍,有利也有弊,當然要測試過才知道。
以客戶現場業務數據庫數據量為基準,做如下測試:
1:增刪改查加密前和加密后的性能對比
2:主從復制加密后系統主流程功能驗證
3:加密前和加密后備份恢復時間對比
4:加密,解密耗時測試
5:加密前加密后占用存儲空間對比
整個測試流程如下:
1.把現場數據拷回來,再進行還原到兩臺相同配置的服務器(8核16G內存),一臺服務器所有表未加密,一臺服務器所有表都加密;
2. 把現場業務系統的主要工作流的sql拿來,使用jmeter做并發性能測試對比;
3.設置主從,測試加密情況下,主從同步是否正常,同步是否及時;
考慮理論上應該沒什么大問題,這里只簡單的通過導入一個大批量插入數據的sql,來測試是否及時同步到從庫。
4.在對第二臺服務器中的所有業務數據表進行加密時,順便記錄加密耗時,以及加密后的空間占用計算空間增長,以及解密耗時;
5.分別測試加密和沒有加密情況下的備份恢復時間。
經過兩天的測試,基本結論如下:
1:表加密后業務系統的增刪改查操作沒有出現明顯的性能降低
2:備份恢復的性能也沒有明顯的影響;
3:不影響主從復制,主從同步的及時性方面基本不受影響,沒有出現明顯的延遲;
4:空間增長方面,加密后反倒占用空間變小了;但是加密解密需較多的存儲空間
由于數據庫中設置了innodb_file_per_table=1,每個表獨占一個表空間,分別單獨加密。很明顯的看到加密后的文件反倒比加密前變小了,估計是加密過程中去掉了文件中的碎片?
但是加密過程中需要有和原表文件大小差不多的空閑空間,否則加密會失敗,解密也是一樣。
因為mysql表加密采用AES加密算法,實際上源文件不變,Mysql會新生成一個臨時文件,把原表文件的數據,不斷讀取寫入到新文件,直到加密完成,再刪除原文件,把加密后的文件替換到原文件。解密也是一樣。
如果是單用戶串行操作完成整個數據庫的加密,可以簡單的估算,加密解密額外需要的表空間大小為:需要加密的數據庫中單個表文件占用空間最大的表,所占用的空間。
例如一個300G的數據庫中,最大的表占用70G,如果是串行加密所有的表,整個加密所需要的額外的磁盤空間為70G。解密也是同樣如此。
如果是多個會話并行執行加密操作,需要的空間就是各自需要加密的表中最大的表空間占用大小之和。
5:加密,解密非常耗時,在生產環境不可接受
如果上面說的空間占用情況還可以接受,可耗時問題就讓人覺得mysql的加密非常雞肋了。
測試下來,一個億不到的業務量的情況下 整個系統的所有表加密完成時間需要整整一個晚上才行。
測試數據如下:測試環境,8G內存,4核CPU
24秒
3分56秒
8秒
11秒
15分56秒
13分48秒
15分56秒
13分48秒
1小時3分16秒
31分49秒
8分5秒
4分12秒
2小時48分46秒
1小時40分
59秒
1分57秒
34秒
1分4秒
6小時30分
超過6小時未完成
同樣是9千多萬的數據量,業務表10比表5字段少很多,只是多了一個varchar(500)類型的字段,存儲文件的磁盤完整路徑的。然而加密耗時卻多了幾倍。
6:在不停止業務系統的情況下,加密加密不會阻塞數據查詢操作,但是會阻塞增刪改操作。
根據執行時間直到加密解密操作完成才執行額外發起的增刪改操作,成功或者超時,而對業務系統來說,多半都是會超時失敗。
總結:
mysql的 加密解密雖然不需要停機操作,但是會阻塞對數據庫的增刪改操作。要想快速完成加密解密操作,最好是先停止業務系統讀寫數據庫,再執行。
然而,加密解密的耗時決定了停機肯定會超出用戶的能接受的停機時間!
再來看安全性方面,雖然數據庫文件是加密的,但是只要能有mysql服務的賬戶,訪問數據都是自動解密的,加密的意義又在哪里呢?而對于加密key來說,熟悉mysql加密原理的,完全可以把key一定帶走。可以預見,社區版的加密的安全性方面只不過是掩耳盜鈴罷了!
不知道大家的項目中是否也有數據庫加密的需求呢?是否有別的更好的方式,在不購買企業版的情況下?
MySQL
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。