你所忽視的MySQL數(shù)據(jù)庫安全問題
以下的文章主要向大家描述的是MySQL數(shù)據(jù)庫安全問題,數(shù)據(jù)庫系統(tǒng)的安全性包括的方面很廣泛。由于某些情況下,數(shù)據(jù)庫服務(wù)器容許客戶機從網(wǎng)絡(luò)上進行連接,因此客戶機連接的安全對MySQL數(shù)據(jù)庫安全有很重要的影響。
不在客戶機的命令行上提供密碼
使用mysql、mysqladmin等客戶機用一個用戶身份與MySQL服務(wù)器連接時,需要為連接提供密碼。
1可以在命令行上提供密碼
shell>mysql –u root –pmypass
注意,-p選項與密碼之間不可有空格,否則會提示你輸入密碼,并報錯。
你也可以使用長格式
shell>mysql –user=root –password=mypass
現(xiàn)在你可以考察這樣做的后果:
在Unix上,$ps –aux | grep mysql
在win9x上,你可以按住Ctrl+Alt+Del鍵,NT上你可以打開任務(wù)管理器。
你發(fā)現(xiàn)了什么,你發(fā)現(xiàn)密碼清清楚楚的顯示在你的面前。所以,你無論何時也不要這么做。
所以你需要讓客戶機提示你的密碼:
shell>mysql –u root –p
你也可以使用選項文件提供密碼,但是注意為了安全,不能在選項文件中存儲密碼。你可以只提供password選項,讓客戶機提示你輸入密碼。
使用SSH加密客戶機連接
這是一個關(guān)于怎樣用SSH 得到一個安全的連接遠程MySQL服務(wù)器的注意事項(David Carlson)。
在你的windows機器上安裝SSH客戶 - 我使用了一個來自http://www.doc.ic.ac.uk/~ci2/ssh/的免費SSH客戶。其他有用的鏈接:
http://www.npaci.edu/Security/npaci_security_software.html
http://www.npaci.edu/Security/samples/ssh32_windows/index.html.
啟動SSH。設(shè)置主機名字 = 你的MySql服務(wù)器名或IP地址,設(shè)置userid=你的用戶名登錄到你的服務(wù)器。
點擊“local forwords”。設(shè)定local port: 3306, host: localhost, remote port: 3306
保存一切,否則下次你將必須再做一遍。
用SSH登錄到你的服務(wù)器。
啟動一些ODBC應(yīng)用程序(例如Access)。
創(chuàng)造一個新文件并且用ODBC驅(qū)動程序鏈接到mySQL,就像你通常做的一樣,除了對服務(wù)器用用戶“localhost”。
搞定。它對一個直接的因特網(wǎng)連接工作得很好。
不要使用Unix的root用戶運行MySQL守護進程
不要作為Unix的root用戶運行MySQL守護進程。mysqld能以任何用戶運行,你也可以創(chuàng)造一個新的Unix用戶mysql使一切更安全。如果你作為其它Unix用戶運行mysqld,你不需要改變在user表中的root用戶名,因為MySQL用戶名與Unix 用戶名沒關(guān)系。
你可以作為其它Unix用戶編輯mysql.server啟動腳本mysqld?;蛘呤褂眠x項文件。有關(guān)如何用非root用戶啟動MySQL服務(wù)器的細節(jié),請見第二章。
數(shù)據(jù)庫目錄的安全
MySQL服務(wù)器提供了一個通過mysql數(shù)據(jù)庫安全中的授權(quán)表,實現(xiàn)了一個十分靈活的權(quán)限系統(tǒng),保證了從網(wǎng)絡(luò)訪問數(shù)據(jù)的安全性。但是,如果服務(wù)器主機上的其它用戶擁有對服務(wù)器目錄的直接訪問權(quán),那么你的服務(wù)器的數(shù)據(jù)仍舊是不安全的。
一般你可能用一個非特權(quán)的Unix用戶執(zhí)行守護程序。檢查那個運行mysqld的Unix用戶是唯一的在數(shù)據(jù)庫目錄下有讀/寫權(quán)限的用戶。
可能的安全漏洞
顯然,你不會讓服務(wù)器主機上的其它用戶擁有對數(shù)據(jù)庫目錄文件的寫訪問權(quán),但是,僅僅是讀訪問權(quán)也非常危險。
由于象GRANT和SET PASSWORD這樣的查詢都被記錄到日志中去了,常規(guī)和更新日志文件包含了有關(guān)密碼的敏感查詢文本。如果一個攻具有對這些日志的讀訪問權(quán),那么他只要在日志文件中查找GRANT或PASSWORD這樣的敏感單詞,就很容易找到密碼的明文。
對于表文件的讀訪問也是很危險的,竊取文件并使MySQL以及以純文本的形式顯示表的內(nèi)容是微不足道的事??梢园聪铝胁襟E進行:
1、安裝一個新的MySQL分發(fā),可以是在另一臺主機上,也可以就在當前的服務(wù)器主機上安裝,使用與正式服務(wù)器不同的端口、套接字和數(shù)據(jù)文件。
2、將竊取的表的相應(yīng)文件拷貝到新服務(wù)數(shù)據(jù)庫目錄中的test目錄下
在Unix設(shè)置合適的數(shù)據(jù)庫目錄權(quán)限
如果要消除這些安全漏洞,就要安排數(shù)據(jù)庫目錄及其中所有文件和目錄的所有權(quán),是的只有啟動服務(wù)器的專用帳戶才可以訪問它們。操作步驟如下:
1、切換到root用戶
$su
2、設(shè)置數(shù)據(jù)庫目錄及其中所有文件目錄的所有權(quán)為運行該服務(wù)器的帳號所有,在本書中一直將這個帳號假定為mysql,把所有的組設(shè)為root組
%chown –R mysql:root DATADIR
3、修改數(shù)據(jù)庫目錄及其中所有文件目錄的權(quán)限為只有所有者可以讀寫
%chmod –R go-rwx DATADIR
在NT系統(tǒng)中設(shè)置合適的數(shù)據(jù)庫目錄權(quán)限
在NT系統(tǒng)中的數(shù)據(jù)庫目錄的安全性可能比較簡單:
讀者可能想到,把所有目錄文件改為只有某個帳戶administrator例如可讀寫。但是,這樣會有一個問題,就是這能在 administrator帳戶中用手動啟動獨立的服務(wù)器,如果讓mysql系統(tǒng)服務(wù)自動啟動的方法也不可行,解決方法是讓數(shù)據(jù)庫目錄也可被 administrators組用戶讀寫,這樣MySQL服務(wù)器就可以用系統(tǒng)服務(wù)的方法自動啟動了,也可以在任何帳戶中用net start mysql啟動。
另外一個問題是,如果你在非administrators組用戶中或者從網(wǎng)絡(luò)都無法建立數(shù)據(jù)庫連接,因為沒有數(shù)據(jù)庫目錄的讀的權(quán)利,如果要正常使用,還需要 寫的權(quán)利。解決方法是讓SYSTEM組用戶能夠隊數(shù)據(jù)庫目錄讀寫。
由于許可證和費用的原因,通常建議你在Linux服務(wù)器上使用MySQL,在Windows平臺之用來測試或者數(shù)據(jù)錄入工作。但是,如果你要在Windows上使用的話,可以注意本小節(jié)的一些內(nèi)容。
影響安全的mysqld選項
下列mysqld選項影響安全:
–secure
由gethostbyname()系統(tǒng)調(diào)用返回的IP數(shù)字被檢查,確保他們解析回到原來的主機名。這對某些外人通過模仿其它主機獲得存取權(quán)限變得更難。這個選項也增加一些聰明的主機名檢查。在MySQL3.21里,選擇缺省是關(guān)掉的,因為它有時它花很長時間執(zhí)行反向解析。MySQL 3.22緩存主機名并缺省地啟用了這個選項。
–skip-grant-tables
這個選項導(dǎo)致服務(wù)器根本不使用權(quán)限系統(tǒng)。這給每個人以完全存取所有的數(shù)據(jù)庫的權(quán)力!(通過執(zhí)行mysqladmin reload,你能告訴一個正在運行的服務(wù)器再次開始使用授權(quán)表。)
–skip-name-resolve
主機名不被解析。所有在授權(quán)表的Host的列值必須是IP數(shù)字或localhost。
–skip-networking
在網(wǎng)絡(luò)上不允許TCP/IP連接。所有到mysqld的連接必須經(jīng)由Unix套接字進行。這個選項對使用MIT-pthreads的系統(tǒng)是不合適的,因為MIT-pthreads包不支持Uni。上述的相關(guān)內(nèi)容就是對MySQL數(shù)據(jù)庫安全問題的描述,希望會給你帶來一些幫助在此方面。