作為MySQL管理員的您,在維護MySQL安裝的安全性和完整性方面能夠做些什麼。在本文中,我們將更詳細地討論以下與安全性相關的問題:
為什麼說安全性是重要的,應該警惕哪些攻擊?
從服務器主機中的用戶那裡您將面臨什麼風險(內部安全性),能做什麼?
從在網絡上連接到服務器的客戶機那裡您將面臨什麼風險(外部安全性),能做什麼?
MySQL管理員有責任保護數據庫內容的安全,使得記錄只能由經過嚴格認證的那些用戶訪問。這包括內部安全性和外部安全性。
內部安全性關心文件系統級的問題,如保護MySQL數據目錄免遭擁有運行服務器的機器賬號的用戶的攻擊。但是,如果數據目錄內容的文件許可權過分隨意,有人可以將對應這些表的文件進行簡單的替換的話,內部安全性就不能很好地確保適當建立對網絡上客戶機訪問的授權表的控制。
外部安全性關心客戶機從外部連接的問題,如防止MySQL服務器免遭通過網絡進來的通過服務器的連接請求對數據庫內容訪問的攻擊。要建立MySQL授權表使得它們不允許對服務器所管理的數據庫的訪問(除非提供了有效的名字和口令)。
本文提供了應該了解的有關問題的指導,並說明如何防止內部和外部級別中未認證的訪問。
MySQL服務器提供了一個通過MySQL數據庫中的授權表來實現的靈活的權限系統。可以設置這些表的內容來允許或拒絕數據庫對客戶機的訪問。這提供了關於未認證的網絡訪問數據的安全性。但是,如果服務器主機上的其他用戶具有對該數據目錄內容的直接訪問權,則將不能對訪問數據的網絡建立良好的安全性。除非知道您是曾在運行MySQL服務器的機器上注冊的惟一的一個人,否則需要關心在該機器上的其他用戶獲得對數據目錄訪問的可能性。
以下是您想要保護的內容:
數據庫文件。顯然想要維護由服務器維護的數據庫的保密性。數據庫的所有者通常要考慮數據庫內容的專有性。即使他們不考慮,也最多是使數據庫的內容公共化,而不會使那些內容因數據庫目錄安全性低而被洩露。
日志文件。常規和更新日志必須安全,因為它們包含了查詢文本。這有相當的利害關系,因為具有日志文件訪問的任何人都可以監控發生在數據庫中的事務處理。
與日志文件有關的更為特殊的安全性問題是,像GRANT 和SET PASSWord 這樣的查詢被記錄在日志中了。常規和更新日志文件包含敏感的查詢文本,其中包括了口令(MySQL使用口令加密,但這只適用於在口令設置之後的連接建立。設置口令的過程包含在GRANT、INSERT 或SET PASSWORD 這樣的查詢中,但這些查詢以純文本的形式被記錄。)如果一個攻擊者具有對日志的讀訪問權,那他只需在日志中對GRANT 或PASSWord 這樣的詞運行grep 就能找到敏感信息。
顯然,您不想讓服務器主機上的其他用戶擁有對數據目錄文件的寫訪問權,因為那樣的話,他們就可以在狀態文件或數據庫表上肆意踐踏。但讀訪問也很危險。如果表文件可讀取,那麼竊取文件並使MySQL自己以純文本的形式顯示表的內容是微不足道的事。可按下列步驟進行:
1) 在服務器主機上安裝您的MySQL服務器,但使用與正式服務器不同的端口、套接字和數據文件。
2) 運行mysql_install_db 初始化您的數據目錄。這將允許您作為MySQL的root 用戶訪問服務器,因此您將具有完全控制服務器訪問機制的權利。它還建立了一個test 數據庫。
3) 將您想竊取的表的相應文件拷貝到服務器數據目錄下的test 子目錄中。