《Mysql應用mysql安全設置十四個最佳方法》要點:
本文介紹了Mysql應用mysql安全設置十四個最佳方法,希望對您有用。如果有疑問,可以聯系我們。
MYSQL學習1、避免從互聯網訪問mysql數據庫,確保特定主機才擁有訪問特權
?
直接通過本地網絡之外的計算機改變生產環境中的數據庫是異常危險的.有時,管理員會打開主機對數據庫的訪問:
?
MYSQL學習這其實是完全放開了對root的訪問.所以,把重要的操作限制給特定主機非常重要:
?
MYSQL學習此時,你仍有完全的訪問,但只有指定的ip(不管其是否靜態)可以訪問.
?
2、定期備份數據庫
?
任何系統都有可能發生災難.服務器、mysql也會崩潰,也有可能遭受入侵,數據有可能被刪除.只有為最糟糕的情況做好了充分的準備,才能夠在事后快速地從災難中恢復.企業最好把備份過程作為服務器的一項日常工作.
?
3、禁用或限制遠程訪問
?
前面說過,如果使用了遠程訪問,要確保只有定義的主機才可以訪問服務器.這一般是通過tcp wrappers、iptables或任何其它的防火墻軟件或硬件實現的.
為限制打開網絡socket,管理員應當在my.cnf或my.ini的[mysqld]部分增加下面的參數:
skip-networking
這些文件位于windows的c:program filesmysqlmysql server 5.1文件夾中,或在linux中,my.cnf位于/etc/,或位于/etc/mysql/.這行命令在mysql啟動期間,禁用了網絡連接的初始 化.請注意,在這里仍可以建立與mysql服務器的本地連接.
另一個可行的方案是,強迫mysql僅監聽本機,方法是在my.cnf的[mysqld]部分增加下面一行:
bind-address=127.0.0.1
如果企業的用戶從自己的機器連接到服務器或安裝到另一臺機器上的web服務器,你可能不太愿意禁用網絡訪問.此時,不妨考慮下面的有限許可訪問:
mysql> grant select, insert on mydb.* to 'someuser'@'somehost';
這里,你要把someuser換成用戶名,把somehost換成相應的主機.
?
4、設置root用戶的口令并改變其登錄名
?
在linux中,root用戶擁有對所有數據庫的完全訪問權.因而,在linux的安裝過程中,一定要設置root口令.當然,要改變默認的空口令,其方法如下:
access mysql控制臺:$ mysql -u root -p
在mysql控制臺中執行:
> set password for 'root'@'localhost' = password('new_password');
在實際操作中,只需將上面一行的new_password換成實際的口令即可.
在linux控制臺中更改root口令的另一種方法是使用mysqladmin工具:
$ mysqladmin -u root password new_password
此時,也是將上面一行的new_password換成實際的口令即可.
當然,這是需要使用強口令來避免強力攻擊.
為了更有效地改進root用戶的安全性,另一種好方法是為其改名.為此,你必須更新表用戶中的mysql數據庫.在mysql控制臺中進行操作:
?
MYSQL學習然后,通過linux訪問mysql控制臺就要使用新用戶名了:
?
MYSQL學習5、移除測試(test)數據庫
?
在默認安裝的mysql中,匿名用戶可以訪問test數據庫.我們可以移除任何無用的數據庫,以避免在不可預料的情況下訪問了數據庫.因而,在mysql控制臺中,執行:
> drop database test;
?
6、禁用local infile
?
另一項改變是禁用”load data local infile”命令,這有助于防止非授權用戶訪問本地文件.在php應用程序中發現有新的sql注入漏洞時,這樣做尤其重要.
此外,在某些情況下,local infile命令可被用于訪問操作系統上的其它文件(如/etc/passwd),應使用下現的命令:
?
MYSQL學習更簡單的方法是:
?
MYSQL學習為禁用local infile命令,應當在mysql配置文件的[mysqld]部分增加下面的參數:
?
MYSQL學習7、移除匿名賬戶和廢棄的賬戶
?
有些mysql數據庫的匿名用戶的口令為空.因而,任何人都可以連接到這些數據庫.可以用下面的命令進行檢查:
?
MYSQL學習
在安全的系統中,不會返回什么信息.另一種方法是:
?
MYSQL學習
如果grants存在,那么任何人都可以訪問數據庫,至少可以使用默認的數據庫“test”.其檢查方法如下:
?
MYSQL學習
如果要移除賬戶,則執行命令:
?
MYSQL學習
從mysql的5.0版開始支持drop user命令.如果你使用的老版本的mysql,你可以像下面這樣移除賬戶:
?
MYSQL學習8、降低系統特權
?
常見的數據庫安全建議都有“降低給各方的特權”這一說法.對于mysql也是如此.一般情況下,開發人員會使用最大的許可,不像安全管理一樣考慮許可原則,而這樣做會將數據庫暴露在巨大的風險中.
為保護數據庫,務必保證真正存儲mysql數據庫的文件目錄是由”mysql” 用戶和” mysql”組所擁有的.
?
MYSQL學習
此外,還要確保僅有用戶”mysql”和root用戶可以訪問/var/lib/mysql目錄.
mysql的二進制文件存在于/usr/bin/目錄中,它應當由root用戶或特定的”mysql”用戶所擁有.對這些文件,其它用戶不應當擁有“寫”的訪問權:
?
MYSQL學習9、降低用戶的數據庫特權
?
有些應用程序是通過一個特定數據庫表的用戶名和口令連接到mysql的,安全人員不應當給予這個用戶完全的訪問權.
如果攻擊者獲得了這個擁有完全訪問權的用戶,他也就擁有了所有的數據庫.查看一個用戶許可的方法是在mysql控制臺中使用命令show grant
?
MYSQL學習為定義用戶的訪問權,使用grant命令.在下面的例子中,user1僅能從dianshang數據庫的billing表中選擇:
?
MYSQL學習如此一來,user1用戶就無法改變數據庫中這個表和其它表的任何數據.
另一方面,如果你要從一個用戶移除訪問權,就應使用一個與grant命令類似的revoke命令:
?
MYSQL學習10、移除和禁用.mysql_history文件
?
在用戶訪問mysql控制臺時,所有的命令歷史都被記錄在~/.mysql_history中.如果攻擊者訪問這個文件,他就可以知道數據庫的結構.
$ cat ~/.mysql_history
為了移除和禁用這個文件,應將日志發送到/dev/null.
$export mysql_histfile=/dev/null
上述命令使所有的日志文件都定向到/dev/null,你應當從home文件夾移除.mysql_history:$ rm ~/.mysql_history,并創建一個到/dev/null的符號鏈接.
?
11、安全補丁
務必保持數據庫為最新版本.因為攻擊者可以利用上一個版本的已知漏洞來訪問企業的數據庫.
?
12、啟用日志
如果數據庫服務器并不執行任何查詢,建議你啟用跟蹤記錄,你可以通過在/etc/my.cnf文件的[mysql]部分添加:log =/var/log/mylogfile.
對于生產環境中任務繁重的mysql數據庫,因為這會引起服務器的高昂成本.
此外,還要保證只有root和mysql可以訪問這些日志文件.
錯誤日志
務必確保只有root和mysql可以訪問hostname.err日志文件.該文件存放在mysql數據歷史中.該文件包含著非常敏感的信息,如 口令、地址、表名、存儲過程名、代碼等,它可被用于信息收集,并且在某些情況下,還可以向攻擊者提供利用數據庫漏洞的信息.攻擊者還可以知道安裝數據庫的 機器或內部的數據.
mysql日志
確保只有root和mysql可以訪問logfilexy日志文件,此文件存放在mysql的歷史目錄中.
?
13、改變root目錄
?
unix操作系統中的chroot可以改變當前正在運行的進程及其子進程的root目錄.重新獲得另一個目錄root權限的程序無法訪問或命名此目錄之外的文件,此目錄被稱為“chroot監獄”.
通過利用chroot環境,你可以限制mysql進程及其子進程的寫操作,增加服務器的安全性.
你要保證chroot環境的一個專用目錄,如/chroot/mysql.此外,為了方便利用數據庫的管理工具,你可以在mysql配置文件的[client]部分改變下面的參數:
?
MYSQL學習14、禁用local infile命令
?
load data local infile可以從文件系統中讀取文件,并顯示在屏幕中或保存在數據庫中.如果攻擊者能夠從應用程序找到sql注入漏洞,這個命令就相當危險了.下面的命令可以從mysql控制臺進行操作:
> select load_file("/etc/passwd");
該命令列示了所有的用戶.解決此問題的最佳方法是在mysql配置中禁用它,在centos中找到/etc/my.cnf或在ubuntu中找到 /etc/mysql/my.cnf,在[mysqld]部分增加下面一行:set-variable=local-infile=0.搞定.
MYSQL學習保護服務器的安全對于保障mysql數據庫的安全也是至關重要的.
服務器的安全對于數據庫來說可謂生死攸關.