国产精品香蕉在线观看网,亚洲欧美精品综合在线观看,亚洲不卡av一区二区无码不卡,亚洲日本精品国产第一区二区

移動安全 安全管理 應用案例 網絡威脅 系統(tǒng)安全應用安全 數據安全 云安全
當前位置: 主頁 > 信息安全 > 應用安全 >

保障MySQL安然的14個最好編制

時間:2013-11-22 18:20來源:TuZhiJiaMi企業(yè)信息安全專家 點擊:
MySQL數據庫一貫以高機能、高可性和易用性著稱,它已成為世界上最風行的開源數據庫。大年夜量的小我、WEB開辟者、大年夜型公司等都在其網站、關頭系統(tǒng)、軟件包中遍及利用MySQL數據庫。
Tags應用安全(1006)數據庫(89)注入漏洞(26)MySQL(10)  

  MySQL數據庫一貫以高機能、高可性和易用性著稱,它已成為世界上最風行的開源數據庫。大年夜量的小我、WEB開辟者、大年夜型公司等都在其網站、關頭系統(tǒng)、軟件包中遍及利用MySQL數據庫。

  凡是,良多企業(yè)在擺設一種產品時,安然性常常得不到應有的正視。企業(yè)最關心的是使其可以盡快地運行,企業(yè)由此也能夠盡快獲利。

  但有的企業(yè)在安裝MySQL時用的是默許選項,由此造成其數據不服安,且辦事器也面對被進侵的風險,并有可能在短時候內就呈現機能標題問題。下面將供給保障MySQL安然的最好編制。

  1、避免從互聯網拜候MySQL數據庫,確保特定主機才具有拜候特權

  直接經由過程本地收集以外的計較機改變出產環(huán)境中的數據庫是異常危險的。有時,治理員會打開主機對數據庫的拜候:

  >GRANT ALL ON *.* TO 'root'@'%';

  這其實是完全鋪開了對root的拜候。所以,把首要的把持限制給特定主機很是首要:

  >GRANT ALL ON *.* TO 'root'@'localhost';

  >GRANT ALL ON *.* TO 'root'@'myip.athome'

  >FLUSH PRIVILEGES

  此時,你仍有完全的拜候,但只有指定的IP(不管其是不是靜態(tài))可以拜候。

  2、按期備份數據庫

  任何系統(tǒng)都有可能產生災害。辦事器、MySQL也會解體,也有可能蒙受進侵,數據有可能被刪除。只有為最糟的環(huán)境做好了充分的預備,才可以或許在過后快速地從災害中恢復。企業(yè)最好把備份過程作為辦事器的一項平常工作。

  3、禁用或限制長途拜候

  前面說過,假定利用了長途拜候,要確保只有定義的主機才可以拜候辦事器。這通常為經由過程TCP wrappers、iptables或任何其它的防火墻軟件或硬件實現的。

  為限制打開收集socket,治理員該當在my.cnf或my.ini的[mysqld]部門增加下面的參數:

  skip-networking

  這些文件位于windows的C:\Program Files\MySQL\MySQL Server 5.1文件夾中,或在Linux中,my.cnf位于/etc/,或位于/etc/mysql/。這行號令在MySQL啟動期間,禁用了收集連接的初始化。請寄望,在這里仍可以成立與MySQL辦事器的本地連接。

  另外一個可行的方案是,逼迫MySQL僅監(jiān)聽本機,編制是在my.cnf的[mysqld]部門增加下面一行:

  bind-address=127.0.0.1

  假定企業(yè)的用戶從本身的機械連接到辦事器或安裝到另外一臺機械上的web辦事器,你可能不太愿意禁用收集拜候。此時,無妨考慮下面的有限許可拜候:

  mysql> GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';

  這里,你要把someuser換成用戶名,把somehost換成響應的主機。

  4、設置root用戶的口令并改變其登錄名

  在linux中,root用戶具有對所稀有據庫的完全拜候權。因此,在Linux的安裝過程中,必然要設置root口令。當然,要改變默許的空口令,其編制以下:

  Access MySQL節(jié)制臺:$ mysql -u root -p

  在MySQL節(jié)制臺中履行:

  >SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

  在實際把持中,只需將上面一行的new_password換成實際的口令便可。

  在Linux節(jié)制臺中更改root口令的另外一種編制是利用mysqladmin東西:

  $ mysqladmin -u root password new_password

  此時,也是將上面一行的new_password換成實際的口令便可。

  當然,這是需要利用強口令來避免強力報復打擊。

  為了更有效地改進root用戶的安然性,另外一種好編制是為其改名。為此,你必需更新表用戶中的mySQL數據庫。在MySQL節(jié)制臺中進行把持:

  >USE mysql;

  >UPDATE user SET user="another_username" WHERE user="root";

  >FLUSH PRIVILEGES;

  然后,經由過程Linux拜候MySQL節(jié)制臺就要利用新用戶名了:

  $ mysql -u another_username -p

  5、移除測試(test)數據庫

  在默許安裝的MySQL中,匿名用戶可以拜候test數據庫。我們可以移除任何無用的數據庫,以避免在不成預感的環(huán)境下拜候了數據庫。因此,在MySQL節(jié)制臺中,履行:

  >DROP DATABASE test;

  6、禁用LOCAL INFILE

  另外一項改變是禁用”LOAD DATA LOCAL INFILE”號令,這有助于避免非授權用戶拜候本地文件。在PHP利用法度中發(fā)現有新的SQL注進縫隙時,如許做特別首要。

  別的,在某些環(huán)境下,LOCAL INFILE號令可被用于拜候把持系統(tǒng)上的其它文件(如/etc/passwd),應利用下現的號令:

  mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1

  更簡單的編制是:

  mysql> SELECT load_file("/etc/passwd")

  為禁用LOCAL INFILE號令,該當在MySQL建設文件的[mysqld]部門增加下面的參數:

  set-variable=local-infile=0

  7、移除匿名賬戶和燒毀的賬戶

  有些MySQL數據庫的匿名用戶的口令為空。因此,任何人都可以連接到這些數據庫??梢杂孟旅娴奶柫钸M行查抄:

  mysql> select * from mysql.user where user="";

  在安然的系統(tǒng)中,不會返回甚么信息。另外一種編制是:

  mysql> SHOW GRANTS FOR ''@'localhost';

  mysql> SHOW GRANTS FOR ''@'myhost';

  假定grants存在,那么任何人都可以拜候數據庫,起碼可利用默許的數據庫“test”。其查抄編制以下:

  shell> mysql -u blablabla

  假定要移除賬戶,則履行號令:

  mysql> DROP USER "";

  從MySQL的5.0版開端撐持DROP USER號令。假定你利用的老版本的MySQL,你可以像下面如許移除賬戶:

  mysql> use mysql;

  mysql> DELETE FROM user WHERE user="";

  mysql> flush privileges;

  8、降落系統(tǒng)特權

  常見的數據庫安然建議都有“降落給各方的特權”這一說法。對MySQL也是如斯。一般環(huán)境下,開辟人員會利用最大年夜的許可,不像安然治理一樣考慮許可原則,而如許做會將數據庫透露在巨大年夜的風險中。

  為呵護數據庫,務必包管真正存儲MySQL數據庫的文件目次是由”mysql” 用戶和” mysql”組所具有的。

  shell>ls -l /var/lib/mysql

  別的,還要確保獨一用戶”mysql”和root用戶可以拜候/var/lib/mysql目次。

  Mysql的二進制文件存在于/usr/bin/目次中,它該當由root用戶或特定的”mysql”用戶所具有。對這些文件,其它用戶不該當具有“寫”的拜候權:

  shell>ls -l /usr/bin/my*

  9、降落用戶的數據庫特權

  有些利用法度是經由過程一個特定命據庫表的用戶名和口令連接到MySQL的,安然人員不該當賜與這個用戶完全的拜候權。

  假定報復打擊者獲得了這個具有完全拜候權的用戶,他也就具有了所有的數據庫。查看一個用戶許可的編制是在MySQL節(jié)制臺中利用號令SHOW GRANT

  >SHOW GRANTS FOR 'user'@'localhost';

  為定義用戶的拜候權,利用GRANT號令。鄙人面的例子中,user1僅能從dianshang數據庫的billing表當選擇:

  >GRANT SELECT ON billing.dianshang TO 'user1'@'localhost';

  >FLUSH PRIVILEGES;

  如斯一來,user1用戶就沒法改變數據庫中這個表和其它表的任何數據。

  另外一方面,假定你要從一個用戶移除拜候權,就應利用一個與GRANT號令近似的REVOKE號令:

  >REVOKE SELECT ON billing.ecommerce FROM 'user1'@'localhost';

  >FLUSH PRIVILEGES;

  10、移除和禁用.mysql_history文件

  在用戶拜候MySQL節(jié)制臺時,所有的號令汗青都被記其實~/.mysql_history中。假定報復打擊者拜候這個文件,他便可以知道數據庫的布局。

  $ cat ~/.mysql_history

  為了移除和禁用這個文件,應將日記發(fā)送到/dev/null。

  $export MYSQL_HISTFILE=/dev/null

  上述號令使所有的日記文件都定向到/dev/null,你該當從home文件夾移除.mysql_history:$ rm ~/.mysql_history,并成立一個到/dev/null的符號鏈接。

  11、安然補丁

  務必保持數據庫為最新版本。因為報復打擊者可以操縱上一個版本的已知縫隙來拜候企業(yè)的數據庫。

  12、啟用日記

  假定你的數據庫辦事器其實不履行任何查詢,建議你啟用跟蹤記實,你可以經由過程在/etc/my.cnf文件的[Mysql]部門添加:log =/var/log/mylogfile。

  對出產環(huán)境中任務沉重的MySQL數據庫,因為這會引發(fā)辦事器的昂揚成本。

  別的,還要包管只有root和mysql可以拜候這些日記文件。

  弊端日記

  務必確保只有root和mysql可以拜候hostname.err日記文件。該文件存放在mysql數據汗青中。該文件包含著很是敏感的信息,如口令、地址、表名、存儲過程名、代碼等,它可被用于信息匯集,并且在某些環(huán)境下,還可以向報復打擊者供給操縱數據庫縫隙的信息。報復打擊者還可以知道安裝數據庫的機械或內部的數據。

  MySQL日記

  確保只有root和mysql可以拜候logfileXY日記文件,此文件存放在mysql的汗青目次中。

  13、改變root目次

  Unix把持系統(tǒng)中的chroot可以改變當前正在運行的過程及其子過程的root目次。從頭獲得另外一個目次root權限的法度沒法拜候或定名此目次以外的文件,此目次被稱為“chroot監(jiān)獄”。

  經由過程操縱chroot環(huán)境,你可以限制MySQL過程及其子過程的寫把持,增加辦事器的安然性。

  你要包管chroot環(huán)境的一個專用目次,如/chroot/mysql。別的,為了便利當用數據庫的治理東西,你可以在MySQL建設文件的[client]部門改變下面的參數:

  [client]

  socket = /chroot/mysql/tmp/mysql.sock

  14、禁用LOCAL INFILE號令

  LOAD DATA LOCAL INFILE可以從文件系統(tǒng)中讀取文件,并顯示在屏幕中或保留在數據庫中。假定報復打擊者可以或許從利用法度找到SQL注進縫隙,這個號令就相當危險了。下面的號令可以從MySQL節(jié)制臺進行把持:

  >SELECT LOAD_FILE("/etc/passwd");

  該號令列示了所有的用戶。解決此標題問題標最好編制是在MySQL建設中禁用它,在CentOS中找到/etc/my.cnf或在Ubuntu中找到/etc/mysql/my.cnf,在[mysqld]部門增加下面一行:set-variable=local-infile=0。弄定。

  當然,唇亡齒冷,呵護辦事器的安然對保障MySQL數據庫的安然也是相當首要的。辦事器的安然對數據庫來講可謂存亡攸關。

------分隔線----------------------------

推薦內容