下面將提供保障MySQL安全的最佳方法。
霍爾果斯網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。成都創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
1、避免從互聯(lián)網(wǎng)訪問MySQL數(shù)據(jù)庫,確保特定主機(jī)才擁有訪問特權(quán)
直接通過本地網(wǎng)絡(luò)之外的計算機(jī)改變生產(chǎn)環(huán)境中的數(shù)據(jù)庫是異常危險的。有時,管理員會打開主機(jī)對數(shù)據(jù)庫的訪問:
GRANT ALL ON *.* TO 'root'@'%';
這其實是完全放開了對root的訪問。所以,把重要的操作限制給特定主機(jī)非常重要:
GRANT ALL ON *.* TO 'root'@'localhost';
GRANT ALL ON *.* TO 'root'@'myip.athome'
FLUSH PRIVILEGES
此時,你仍有完全的訪問,但只有指定的IP(不管其是否靜態(tài))可以訪問。
2、定期備份數(shù)據(jù)庫
任何系統(tǒng)都有可能發(fā)生災(zāi)難。服務(wù)器、MySQL也會崩潰,也有可能遭受入侵,數(shù)據(jù)有可能被刪除。只有為最糟糕的情況做好了充分的準(zhǔn)備,才能夠在事后快速地從災(zāi)難中恢復(fù)。企業(yè)最好把備份過程作為服務(wù)器的一項日常工作。
3、禁用或限制遠(yuǎn)程訪問
前面說過,如果使用了遠(yuǎn)程訪問,要確保只有定義的主機(jī)才可以訪問服務(wù)器。這一般是通過TCP wrappers、iptables或任何其它的防火墻軟件或硬件實現(xiàn)的。
為限制打開網(wǎng)絡(luò)socket,管理員應(yīng)當(dāng)在my.cnf或my.ini的[mysqld]部分增加下面的參數(shù):
skip-networking
這些文件位于windows的C:\Program Files\MySQL\MySQL Server 5.1文件夾中,或在Linux中,my.cnf位于/etc/,或位于/etc/mysql/。這行命令在MySQL啟動期間,禁用了網(wǎng)絡(luò)連接的初始化。請注意,在這里仍可以建立與MySQL服務(wù)器的本地連接。
另一個可行的方案是,強迫MySQL僅監(jiān)聽本機(jī),方法是在my.cnf的[mysqld]部分增加下面一行:
bind-address=127.0.0.1
如果企業(yè)的用戶從自己的機(jī)器連接到服務(wù)器或安裝到另一臺機(jī)器上的web服務(wù)器,你可能不太愿意禁用網(wǎng)絡(luò)訪問。此時,不妨考慮下面的有限許可訪問:
mysql GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';
這里,你要把someuser換成用戶名,把somehost換成相應(yīng)的主機(jī)。
4、設(shè)置root用戶的口令并改變其登錄名
在linux中,root用戶擁有對所有數(shù)據(jù)庫的完全訪問權(quán)。因而,在Linux的安裝過程中,一定要設(shè)置root口令。當(dāng)然,要改變默認(rèn)的空口令,其方法如下:
Access MySQL控制臺:$ mysql -u root -p
在MySQL控制臺中執(zhí)行:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
在實際操作中,只需將上面一行的new_password換成實際的口令即可。
在Linux控制臺中更改root口令的另一種方法是使用mysqladmin工具:
$ mysqladmin -u root password new_password
此時,也是將上面一行的new_password換成實際的口令即可。
當(dāng)然,這是需要使用強口令來避免強力攻擊。
為了更有效地改進(jìn)root用戶的安全性,另一種好方法是為其改名。為此,你必須更新表用戶中的mySQL數(shù)據(jù)庫。在MySQL控制臺中進(jìn)行操作:
USE mysql;
UPDATE user SET user="another_username" WHERE user="root";
FLUSH PRIVILEGES;
然后,通過Linux訪問MySQL控制臺就要使用新用戶名了:
$ mysql -u another_username -p
5、移除測試(test)數(shù)據(jù)庫
在默認(rèn)安裝的MySQL中,匿名用戶可以訪問test數(shù)據(jù)庫。我們可以移除任何無用的數(shù)據(jù)庫,以避免在不可預(yù)料的情況下訪問了數(shù)據(jù)庫。因而,在MySQL控制臺中,執(zhí)行:
DROP DATABASE test;
原文鏈接:
數(shù)據(jù)庫安全策略是涉及信息安全的高級指導(dǎo)方針,這些策略根據(jù)用戶需要、安裝環(huán)境、建立規(guī)則和法律等方面的限制來制定。
數(shù)據(jù)庫系統(tǒng)的基本安全性策略主要是一些基本性安全的問題,如訪問控制、偽裝數(shù)據(jù)的排除、用戶的認(rèn)證、可靠性,這些問題是整個安全性問題的基本問題。數(shù)據(jù)庫的安全策略主要包含以下幾個方面:
1.保證數(shù)據(jù)庫存在安全
數(shù)據(jù)庫是建立在主機(jī)硬件、操作系統(tǒng)和網(wǎng)絡(luò)上的系統(tǒng),因此要保證數(shù)據(jù)庫安全,首先應(yīng)該確保數(shù)據(jù)庫存在安全。預(yù)防因主機(jī)掉電或其他原因引起死機(jī)、操作系統(tǒng)內(nèi)存泄漏和網(wǎng)絡(luò)遭受攻擊等不安全因素是保證數(shù)據(jù)庫安全不受威脅的基礎(chǔ)。
一 作為最流行的開源數(shù)據(jù)庫引擎,MySQL本身是非常安全的。即便如此,你仍然需要添加額外的安全層來保護(hù)你的MySQL數(shù)據(jù)庫不受攻擊,畢竟任何經(jīng)營網(wǎng)上
在線業(yè)務(wù)的人都不想冒數(shù)據(jù)庫受到損壞的風(fēng)險。接下來,我們將介紹一些實用的辦法,你可以利用這些辦法來保護(hù)MySQL數(shù)據(jù)庫,以便加強網(wǎng)站的安全性。
二 保護(hù)操作系統(tǒng)
確保操作系統(tǒng)的安全是保護(hù)數(shù)據(jù)庫安全的前提,因為如果整個運行環(huán)境不安全,那么網(wǎng)站上所有的東西都脆弱,很容易暴露于攻擊者。為了維護(hù)操作系統(tǒng)和MySQL服務(wù)器,你可以使用以下方法:
2.1 主機(jī)數(shù)據(jù)庫服務(wù)器和web服務(wù)器分別在不同的物理機(jī)器上,如果可能,在一個單獨的服務(wù)器上運行數(shù)據(jù)庫服務(wù)器,以預(yù)防由其他應(yīng)用程序或服務(wù)的漏洞造成的服務(wù)器問題。
安裝殺毒軟件,防火墻以及所有推薦的補丁和更新,防火墻能有效地把流量過濾到MySQL服務(wù)器。為了更好的提高安全性,你還可以實行入口封鎖。
禁用所有不必要的服務(wù),而且這樣的服務(wù)越少越好。
2.2 保護(hù)所有帳戶和密碼
攻擊者侵入MySQL數(shù)據(jù)庫最常見的一種方法是竊取有安全隱患的賬戶信息。為了降低出現(xiàn)這種風(fēng)險的可能性,你不妨試一試下面的方法:
2.2.1. 給所有MySQL賬戶設(shè)置密碼
客戶程序并不是每次都能識別用戶,因此,如果用戶知道數(shù)據(jù)庫名但是沒有這個用戶名的密碼,那他可以指定任何其他用戶名連接到MySQL數(shù)據(jù)庫。讓每個MySQL用戶名都設(shè)置密碼,這樣一來,要想利用匿名賬戶建立連接將會變得很困難。
2.2.2. 不要使用根用戶運行MySQL服務(wù)器
在安裝MySQL的時候,默認(rèn)情況下創(chuàng)建了一個命名為“root”的管理用戶。每個人都知道這一點,所以攻擊者通常試圖侵入這個“root”用戶來獲取訪問權(quán)限。為了保障這個重要帳戶的安全,你需要給它重新命名,然后更改一個長并且復(fù)雜的密碼。
2.2.3你可以在MySQL控制臺使用mysql RENAME USER root TO new_username;
指令給根用戶重命名,使用mysql SET PASSWORD FOR 'username'@'%hostname' =
PASSWORD('newpassword');//這是很重要的一條命令
指令來修改密碼。
三. 減少管理員賬戶
管理員賬戶越多,風(fēng)險越大,所以你應(yīng)該保持盡可能最少的帳戶數(shù)量,只有為那些真正需要它的人創(chuàng)建賬戶。此外,記得要刪除未使用的和匿名的賬戶。如果你有很多管理員賬戶,那你需要定期檢查并清理那些不必要的賬戶。
四. 加強所有的密碼
除了管理員帳戶,你還需要加強所有其他用戶的密碼。你可以檢查所有的用戶名和密碼,必要的時候你還可以重置安全強度低的賬戶密碼。雖說這樣做會有點費時,但卻是有必要的。
五 限制數(shù)據(jù)庫權(quán)限
每個用戶都應(yīng)該被授予適當(dāng)?shù)臋?quán)限以便數(shù)據(jù)庫能夠正常運行,但這樣一來也加大了數(shù)據(jù)庫的安全隱患。就數(shù)據(jù)庫權(quán)限而言,我們有以下幾點建議:
5.1. 不要授予非管理員用戶文件/高級/程序權(quán)限
文件,高級和程序權(quán)限都不應(yīng)該被濫用。文件權(quán)限讓用戶可以在文件系統(tǒng)中的任何一個地方編寫文件,而程序權(quán)限讓用戶在任何時候都能夠查看服務(wù)器活動,終止客戶端連接甚至更改服務(wù)器操作。為了你的數(shù)據(jù)庫安全,這些權(quán)限只能授予給管理員賬戶。
5.2. 限制或禁用顯示數(shù)據(jù)庫權(quán)限
顯示數(shù)據(jù)庫特權(quán)可以用于收集數(shù)據(jù)庫信息,所以攻擊者通常利用它來竊取數(shù)據(jù)并準(zhǔn)備進(jìn)一步攻擊。你應(yīng)該把這個權(quán)限授予那些真正需要的人,或者直接禁用這個權(quán)
限,你只需要把skip-show-database添加到MySQL數(shù)據(jù)庫中的/etc/my.cnf配置文件中。對于Windows操作系統(tǒng)來說,則
需要添加到my.ini文件中。
5.3. 限制管理員和所有其他用戶的權(quán)限
即使是管理員,也不要在同一賬戶中授予所有權(quán)限。因此我們建議你最好降低管理員賬戶訪問數(shù)據(jù)的權(quán)限。至于其他的用戶,你最好檢查所有他們擁有的權(quán)限,以確保一切都是合適的。
六 刪除風(fēng)險組件
MySQL數(shù)據(jù)庫的默認(rèn)配置有一些不必要的組件,你可以考慮以下建議:
6.1. 禁用LOAD DATA LOCAL INFILE指令
這個命令允許用戶讀取本地文件甚至訪問其他操作系統(tǒng)上的文件,這可能幫助攻擊者收集重要的信息并利用應(yīng)用程序的漏洞侵入你的數(shù)據(jù)庫。你需要做的是把set-variable=local-infile=0插入到MySQL數(shù)據(jù)庫的my.cnf文件中,來禁用這個指令。
6.2. 刪除測試數(shù)據(jù)庫
有一個默認(rèn)的“測試”數(shù)據(jù)庫用于測試目的。由于這個數(shù)據(jù)庫有安全風(fēng)險,匿名用戶也可以訪問,你應(yīng)該使用mysql DROP database test;指令盡快把它清除掉。
6.3. 刪除歷史文件
MySQL服務(wù)器有一個歷史文件,它可以幫助你在安裝出錯的時候找到問題所在。歷史文件包含敏感信息,比如說密碼,如果這些信息被攻擊者獲得,那么將會給
你的數(shù)據(jù)庫帶來巨大的安全隱患。在安裝成功后,歷史文件并沒有什么用,因此你可以使用cat /dev/null
~/.mysql_history指令來刪除文件當(dāng)中的內(nèi)容。
七 限制遠(yuǎn)程訪問MySQL服務(wù)器
對于大多數(shù)用戶來說,不需要通過不安全的開放網(wǎng)絡(luò)來訪問MySQL服務(wù)器。你可以通過配置防火墻或硬件,或者迫使MySQL只聽從localhost來限制主機(jī)。此外,需要SSH隧道才能進(jìn)行遠(yuǎn)程訪問。
八 如果你想僅僅從本地主機(jī)來限制用戶建立連接,你需要在在配置文件中添加bind-address=127.0.0.1。
8.1利用日志記錄
啟用日志記錄讓你可以檢測服務(wù)器上的活動,這樣你就可以分析失敗的登錄嘗試和敏感文件的訪問記錄,以便了解是否存在向你的服務(wù)器和數(shù)據(jù)庫發(fā)起的惡意活動。
你只需要把log =/var/log/mylogfile指令添加到MySQL配置文件中,就可以手動啟用日志記錄功能。
8.2至于日志記錄,需要注意以下兩點:
8.2.1日志記錄僅適用于查詢數(shù)量有限的數(shù)據(jù)庫服務(wù)器。對于信息量大的服務(wù)器,這可能會導(dǎo)致高過載。
8.2.2由于“hostname.err”文件包含敏感數(shù)據(jù)表名和密碼,只有“root”和“mysql”才有訪問和記錄這個文件的權(quán)限。