如果你目前用的數(shù)據(jù)庫(kù)是MySQL,有很多簡(jiǎn)單的方法能夠幫助你保護(hù)系統(tǒng)安全,并顯著降低你的敏感數(shù)據(jù)收到未授權(quán)訪問(wèn)的風(fēng)險(xiǎn)。
以技術(shù)為基礎(chǔ)的企業(yè)里最有價(jià)值的資產(chǎn)通常是客戶或者其數(shù)據(jù)庫(kù)中的產(chǎn)品信息。因此,在這樣的企業(yè)中,保證數(shù)據(jù)庫(kù)免受外界攻擊并防止出現(xiàn)軟件和硬件方面的故障是數(shù)據(jù)庫(kù)管理的重要環(huán)節(jié)。
大多數(shù)情況下,硬件和軟件故障都通過(guò)數(shù)據(jù)庫(kù)備份方案進(jìn)行處理。大部分?jǐn)?shù)據(jù)庫(kù)都配備有內(nèi)置的工具來(lái)自動(dòng)執(zhí)行整個(gè)過(guò)程,使得備份任務(wù)不需要花費(fèi)很大力氣,也不會(huì)出現(xiàn)什么差錯(cuò)。不過(guò),數(shù)據(jù)安全問(wèn)題解決起來(lái)就不那么簡(jiǎn)單了。要保護(hù)敏感數(shù)據(jù)的安全,必須確保外部的黑客無(wú)法侵入系統(tǒng),也無(wú)法盜取或破壞數(shù)據(jù)庫(kù)里包含的信息。事實(shí)上,沒(méi)有什么自動(dòng)化的方法來(lái)解決這個(gè)問(wèn)題;相反,要確保企業(yè)數(shù)據(jù)安全,數(shù)據(jù)庫(kù)管理員必須要實(shí)打?qū)嵉娜斯ぴO(shè)立一些能夠阻止?jié)撛诘暮诳颓秩氲钠琳稀?/p>
很多數(shù)據(jù)庫(kù)管理員并沒(méi)有實(shí)施什么數(shù)據(jù)庫(kù)保護(hù)措施,只是因?yàn)檫@做起來(lái)很“棘手”并且太“復(fù)雜”。雖然情況確實(shí)如他們所述,但如果你使用的使MySQL,你只需要用一些簡(jiǎn)單的方法就能夠大大減少你所面臨的風(fēng)險(xiǎn)。本文列舉了其中六大防范措施,不過(guò)你還可以在MySQL的說(shuō)明手冊(cè)和相關(guān)論壇找到更多類似的方法。
第一步:消除授權(quán)表的通配符
MySQL的訪問(wèn)控制系統(tǒng)是通過(guò)一系列所謂授權(quán)表進(jìn)行運(yùn)作的,這些授權(quán)表使我們能夠在數(shù)據(jù)庫(kù)、表和列水平上定義每一位用戶的訪問(wèn)級(jí)別。而這些表也能夠讓管理員授予某用戶普適許可(即總是允許)或授予表使用通配符的權(quán)限,這樣做相當(dāng)危險(xiǎn),因?yàn)楹诳陀锌赡軙?huì)使用一個(gè)被盜帳號(hào)來(lái)獲取訪問(wèn)系統(tǒng)其他部分的權(quán)限。因此,在分配用戶權(quán)限時(shí)要謹(jǐn)慎行事,做到準(zhǔn)確無(wú)誤,并且始終確保用戶獲得的訪問(wèn)權(quán)限恰好足夠他們完成任務(wù)即可。此外,還要謹(jǐn)防給個(gè)人用戶分配SUPER特權(quán),因?yàn)檫@個(gè)級(jí)別的權(quán)限允許用戶操縱基本服務(wù)器配置并訪問(wèn)所有數(shù)據(jù)庫(kù)。
提示:使用SHOW PRIVILEGES命令顯示每一個(gè)用戶帳號(hào)的權(quán)限,以便審計(jì)你的授權(quán)表并檢查通配符的使用權(quán)限是否得當(dāng)。
第二步:使用安全密碼
只有在使用密碼的情況下,用戶帳戶才能得到安全保障。因此,當(dāng)你安裝MySQL時(shí)要做的第一件事就是給MySQL的根帳戶設(shè)置一個(gè)密碼(默認(rèn)情況下密碼為空)。當(dāng)你堵住這個(gè)大漏洞之后,下一步就是要求每一個(gè)用戶帳戶都設(shè)置好自己的密碼,并確保沒(méi)有使用具有啟發(fā)式信息的容易被識(shí)破的密碼,例如生日、用戶姓名字母等。
提示:啟用MySQL的--secure-auth選項(xiàng)以防止用戶使用任何老式的不太安全的MySQL密碼格式。
第三步:檢查配置文件的許可
很多時(shí)候,為了使服務(wù)器連接更加快捷方便,無(wú)論是個(gè)人用戶還是服務(wù)器管理員都把他們的用戶帳號(hào)密碼存儲(chǔ)在MySQL的per-user選項(xiàng)文件中。但是,這個(gè)密碼是以純文本形式存儲(chǔ)在這個(gè)文件中的,很容易就會(huì)被讀取。因此,確保系統(tǒng)的其他用戶無(wú)法查看類似于per-user這種配置文件,并把這些文件存儲(chǔ)在非公共區(qū)域就顯得至關(guān)重要。最好是把per-user配置文件存儲(chǔ)在用戶帳戶的私人主目錄下,并將權(quán)限設(shè)置為0600(只能被根用戶讀寫)。
第四步:對(duì)客戶端服務(wù)器傳輸進(jìn)行加密
在MySQL的客戶端服務(wù)器架構(gòu)(對(duì)于任何此類架構(gòu)也是如此)中,關(guān)于在網(wǎng)絡(luò)中傳輸數(shù)據(jù)時(shí)保證數(shù)據(jù)安全的問(wèn)題非常重要。如果客戶端服務(wù)器事務(wù)是以明文(信息未加密)的方式進(jìn)行的,那么黑客很容易就能發(fā)現(xiàn)這些傳輸中的數(shù)據(jù)包,并從中獲取敏感信息。想要堵住這個(gè)漏洞,你可以激活MySQL設(shè)置中的SSL,或者使用OpenSSH這類的安全外殼實(shí)用程序,以便為通過(guò)的數(shù)據(jù)創(chuàng)造一個(gè)安全的加密通道。通過(guò)這種方式對(duì)客戶端服務(wù)器連接進(jìn)行加密,未經(jīng)授權(quán)的用戶就很難讀取這些不斷在通道中往來(lái)傳輸?shù)臄?shù)據(jù)了。
第五步:禁用遠(yuǎn)程訪問(wèn)功能
如果你的用戶不需要對(duì)服務(wù)器進(jìn)行遠(yuǎn)程訪問(wèn),那你就可以通過(guò)強(qiáng)制所有的MySQL連接都通過(guò)UNIX的socket文件進(jìn)行,這樣做可以大大降低受到網(wǎng)絡(luò)攻擊的風(fēng)險(xiǎn)。設(shè)置服務(wù)器使用了--skip-networking選項(xiàng)啟動(dòng),這樣做能夠屏蔽MySQL的TCP/IP網(wǎng)絡(luò)連接,并確保沒(méi)有用戶能夠遠(yuǎn)程連接到系統(tǒng)。
提示:如果想要更加保險(xiǎn),可以在MySQL服務(wù)器設(shè)置里添加bind-address=127.0.0.1指令,將MySQL強(qiáng)制綁定到本地機(jī)器的IP地址,從而確保只有同一系統(tǒng)的用戶才能連接到MySQL。
第六步:積極監(jiān)控MySQL的訪問(wèn)日志
MySQL里具有很多不同的日志文件,用來(lái)記錄客戶端連接、查詢和服務(wù)器錯(cuò)誤。其中最重要的就是通用查詢?nèi)罩?general query log),其中以時(shí)間戳記錄了每一個(gè)客戶端連接和斷開(kāi)連接,并記錄了客戶端執(zhí)行每一次查詢的情況。如果你懷疑MySQL出現(xiàn)了不尋常的活動(dòng),例如和網(wǎng)絡(luò)侵入有關(guān)的活動(dòng),那么最好對(duì)這個(gè)日志進(jìn)行監(jiān)控,往往就可以查出此類活動(dòng)的源頭。
總結(jié)
MySQL數(shù)據(jù)庫(kù)的保護(hù)工作是一項(xiàng)需要持之以恒的任務(wù),一旦你已經(jīng)開(kāi)始實(shí)施了上面的保護(hù)措施,就不要輕易的中斷。查閱MySQL的相關(guān)說(shuō)明文獻(xiàn)或者訪問(wèn)MySQL的論壇,你可以獲得更多關(guān)于安全方面的信息,然后應(yīng)用到實(shí)際行動(dòng)中,積極主動(dòng)的檢測(cè)和更新系統(tǒng)的安全設(shè)置。


