◆石坤泉 楊震倫
(廣州番禺職業技術學院信息工程學院 廣東 511483)
基于MySQL數據庫的數據隱私與安全策略研究
◆石坤泉 楊震倫
(廣州番禺職業技術學院信息工程學院 廣東 511483)
為提高數據庫安全提升數據庫的性能,力求達到安全與性能的平衡。從數據傳輸安全性、數據存儲安全性以及服務器配置等方面分析了MySQL可能存在的安全漏洞; 從密碼學、安全協議以及文件權限等維度提出本地和遠程訪問MySQL數據庫的安全體系結構; 分析比較了HASH認證與DSA/RSA公鑰認證方式、本地MySQL/SSL與外部SSH通道的安全應用。
MySQL數據庫; 安全漏洞; 安全保護; 策略研究
MySQL是廣為使用的開源數據庫。MySQL支持Sql server 的遷移,支持對Java、c#、PHP等的API,以及通過Memcached的API以NoSQL訪問InnoDB所帶來的更好的開發速度。MySQL廣泛應用于網站、web數據庫、嵌入式應用、大數據、云計算等領域。
大數據在存儲、處理、傳輸等過程中面臨諸多安全風險,具有數據安全與隱私保護需求[1]。數據庫的安全威脅來自于許多不同的途徑。如果我們跟蹤數據庫應用的數據流過程,兩種主要的安全問題可以被歸納出:安全數據傳輸和安全數據存儲及訪問[2]。如果安全威脅按照其所受攻擊的來源來分類,可以分為外部侵入、內部管理漏洞和系統管理員[3]。在數據庫安全體系中,身份認證是最重要的一個環節[4]。在傳輸安全方面,主要用到虛擬專用網絡(VPN、SSH)和基于安全套接層協議 VPN(SSL VPN)技術[5]。
本文基于Windows實驗環境。從身份認證、數據傳輸以及服務器配置等多個維度分析了MySQL可能存在的安全漏洞; 緊緊圍繞身份認證、密碼存儲安全性和數據傳輸安全性,從基礎的SHA-1加密方式引入SSL和SSH協議框架,構建本地和遠程訪問MySQL數據庫的安全體系結構; 并基于該安全體系結構提出了相應的安全策略; 最后,對基礎SHA-1、SHA-256/SSL和SSH通道的安全機制和性能進行比較分析,提出在注重安全性的同時也要注重提升性能。
從內部機制來看,MySQL 數據庫的安全漏洞可能來自于密碼存儲、數據傳輸以及服務器配置等安全問題。
1.1 密碼存儲安全性
(1)數據庫文件安全問題。MySQL數據庫文件保存在數據庫目錄data中,共有“frm”、“myd”“和myi”三種文件。記錄user表的是user.frm、user.myd、user.myi等三個文件,user.myd保存了MySQL數據庫用戶密碼,包括root用戶和其他用戶的密碼。
(2)日志文件的安全問題。比如,使用GRANT授權或使用SET PASSWORD設置密碼時,這樣的有關密碼、用戶權限等方面的敏感查詢文本的都會被記錄到日志中。如果攻擊者具有對這些日志的讀訪問權,那么只要在日志文件中查找GRANT或PASSWORD這樣的敏感單詞,就很容易找到密碼的明文。
1.2 密碼傳輸安全性
比如,使用MySQL -h host –uusername -ppassword命令行連接服務器時,若直接在-p后面輸入明文密碼,則在任務管理器上將清楚地看到密碼。同樣,運行MySQLdump、MySQLimport命令進行數據庫備份或恢復時,也存在明文密碼傳輸的安全性隱患。此外,還可能存在諸如匿名帳戶、服務器配置等方面的安全漏洞。
2.1 使用MySQL/SSL增強本地連接安全性
MySQL默認使用SHA-1即native MySQL authentication(本地MySQL身份驗證),這種加密方法簡單但安全性頗受質疑。采用SHA-256/SSL在一定程度上提高安全性:一是SHA-256可以得到 64個隨機散列字符串,二是使用SHA-256加密需OpenSSL連接mysql服務器。
在具體操作上,MySQL服務端編譯使用SSL,并指定客戶端連接服務器的SSL級別。同時,在使用命令來創建SHA-256加密方式創建用戶時,要先指定使用SHA256_password插件創建用戶。另外,若希望用戶每次必須通過SSL方式,還需在創建用戶時REQUIRE SSL。
2.2 使用外部SSH通道增強遠程數據傳輸安全性
遠程數據傳輸時,可以引入SSH(Secure SHell)通道機制,通過外部SSH通道創建客戶機與MySQL服務器的連接,將傳輸數據進行加密和壓縮,并采用密鑰認證使密碼口令等重要信息不被泄漏。SSHclient與SSHserver之間連接時,會在SSH服務器上生成DSA.KEY和RSA.KEY,利用DSA/RSA良好的加密機制保證數據的安全與數據庫穩定。
在具體操作過程中,要在服務器主機安裝SSH協議軟件(如freeSSHD),搭建好SSH服務器,在客戶機上安裝SSH客戶端(如puTTY、Navicat for MySQL),如圖1所示。

圖1 通過SSH隧道連接MySQL服務器示意圖
2.3 數據庫密碼文件安全策略
為保證數據庫文件和日志文件的安全,可以使用安全的文件系統權限[6]。比如,利用Windows的NTFS權限,對存儲用戶信息的三個數據庫文件特別是用戶授權表設置合法的訪問控制權限。同理,做好FreeSSHd用戶的公鑰文件夾的保護(默認C:Program FilesfreeSSHd),里面有保存用戶信息的FreeSSHdService.ini和公鑰DSAkey.cfg、RSAkey.cfg。
2.4 其它安全策略
為防止配置文件引起的安全隱患,可打開MySQL配置文件my.ini,注釋掉[MySQLd]選項中的skip-grant-tables這一行,防止用戶越過系統身份認證直接登錄MySQL服務器。另外,刪除user為空的匿名帳戶和密碼為空的root帳戶,使用符合密碼復雜性原則的安全級別更高的密碼等。
SSH協議把客戶端與服務器之間傳輸的數據進行加密和壓縮; SSL協議使用通訊雙方的客戶證書以及CA根證書,客戶機在與服務器連接時要與SSL握手; 而常規SHA-1是MySQL的默認加密機制,簡單快速安全性略低。三種安全機制對比如表格1所示。
SSH、SSL均采用了RSA非對稱加密算法,這種算法由密鑰產生(公鑰和密鑰)、加密以及解密三個過程組成,客戶端發出密匙安全驗證的請求→公用密匙比較→密匙加密“質詢”(challeng e)→私人密匙解密→發送給服務器。與常規SHA-1相比,雖然不需要在網絡上傳送口令密碼,安全級別更高,但客戶端與服務器之間連接時間會比較長。