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