MySQL表加密雞肋嗎?

      網友投稿 1012 2025-03-31

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


      針對已有的項目面對客戶的安全審查需求,要對mysql進行表加密嗎?

      表加密影響性能嗎?

      對主從復制有沒有影響?加密后對業務系統有影響嗎?

      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小時內刪除侵權內容。

      上一篇:如何在Word文檔中將數字轉換為單詞?
      下一篇:表格變大怎么調整(表格怎么把表格變大)
      相關文章
      亚洲码欧美码一区二区三区| 亚洲国产综合精品| 亚洲国产精品免费在线观看| 亚洲激情在线视频| 亚洲第一AAAAA片| 国产AV无码专区亚洲AV毛网站| 在线亚洲97se亚洲综合在线| 久久亚洲国产成人精品无码区| 亚洲日本中文字幕天堂网| 国产亚洲精品第一综合| 亚洲高清最新av网站| 亚洲国产激情一区二区三区| 亚洲另类少妇17p| 久久久久亚洲AV成人网人人软件| 亚洲另类激情专区小说图片| 亚洲伊人久久综合影院| 国产亚洲色视频在线| 日本红怡院亚洲红怡院最新| 亚洲国产成人久久精品影视| 亚洲综合日韩中文字幕v在线 | 亚洲欧美日韩中文高清www777| 亚洲 暴爽 AV人人爽日日碰| 亚洲国产乱码最新视频| 亚洲欧美日韩自偷自拍| 妇女自拍偷自拍亚洲精品| 亚洲精品国产福利一二区| 国内精品99亚洲免费高清| 久久亚洲高清观看| 亚洲AV日韩精品久久久久| 亚洲综合久久久久久中文字幕| 91午夜精品亚洲一区二区三区| 亚洲偷偷自拍高清| 人人狠狠综合久久亚洲| 亚洲色婷婷综合开心网| 亚洲熟女少妇一区二区| 无码乱人伦一区二区亚洲一| 亚洲美女中文字幕| 亚洲日韩一区二区一无码| 日韩精品亚洲专区在线观看| 中文字幕精品亚洲无线码一区| 亚洲AV人无码激艳猛片|