MySQL簡單安全的十個設置方法

Mysql的默認安裝參數是mysql性能最好的配置方法,但會造成數據部安全,且服務器也面臨被***的風險,也有可能會在短時間內,出現一些性能的問題


這邊文章從不同的角度去配置mysql的參數,提高安全的方法,你不能去限制別人而已***你的mysql db server,但你可以讓他***和破解浪費更多的時間

一:用戶和密碼設置


剛安裝好的mysql是沒有密碼的,只要能登陸到server主機的都可以無限制的訪問和操作mysql 數據庫,所以設置密碼,是管理mysql數據庫的第一步


Mysqladmin -u root  password 密碼


因爲mysql中的root是超級用戶,很多***者都是想要獲取root的密碼,根據這點可以更改root的用戶名,降低風險


mysql> update user set user='biao' where user='root';


Query OK, 1 row affected (0.22 sec)


Rows matched: 1  Changed: 1  Warnings: 0


也就是說將root的用戶名更改爲biao,密碼和host都是不變的,之後如果再使用root賬戶登錄,就是會提示你被拒絕的


二:增加用戶和權限的設置


如果需要給開發或者維護人員添加賬號,對權限進行處理,能賦予只讀的就賦予只讀的權限,或者對特定數據庫名給寫的權限,以及對登錄IP也可以進行限制


GRANT ALL ON *.* TO 'root'@'%'; 這樣是對所有的主機都可以訪問,只要root的密碼是正確的


也可以是域名


GRANT ALL ON *.* TO 'root'@'aaa.bbb.com';會解析域名的主機,主機可以訪問mysql db


也可以是網段


GRANT ALL ON *.* TO 'root'@192.168.1.%';表示192.168.1.1~254IP地址都可以訪問mysql db


也可以通過linuxiptables 定義訪問策略


三:刪掉mysql的測試庫


[root@test02 ~]# mysql -D  test


不需要驗證即可登錄到庫


mysql> drop database test;


Query OK, 1 row affected (0.13 sec)


Test庫不需要任何驗證都可以登錄,不安全,且是測試庫,可以刪掉


四:禁用LOCAL INFILE


禁用”LOAD DATA LOCAL INFILE”命令,這有助於防止非授權用戶訪問本地文件。在PHP應用程序中發現有新的SQL注入漏洞時,這樣做尤其重要。


此外,在某些情況下,LOCAL INFILE命令可被用於訪問操作系統上的其它文件(如/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


五:移除匿名賬戶和不用的賬戶


有些mysql中,數據庫的用戶名爲空,對應host主機的任何人都可以連接到數據庫,使用命令檢查:


mysql> select user,host from mysql.user where user='';


+------+-----------+


| user | host      |


+------+-----------+


|      | localhost |


|      | test02    |


+------+-----------+


2 rows in set (0.00 sec)


刪除這些存在安全隱患的用戶名


mysql> delete from mysql.user where user='';


Query OK, 2 rows affected (0.00 sec)


如果需要給相應的主機賦予權限,使用grant語句就可以


六:系統權限的管理


在安裝和配置mysql的時候,mysql的主要的配置目錄/data/mysql 數據存儲目錄,/usr/local/mysqlmysql的程序安裝目錄,一般都是將二者的屬主和屬組 賦予給 mysql用戶和mysql組,再設置權限的時候:chmod -R 774 即可,注意:mysql用戶要設置密碼


七:mysql的命令歷史


在用戶訪問的mysql控制檯中,所有的歷史命令都被記錄在~/.mysql_history,如果***者訪問這個文件,就可以獲取到mysql的結構信息


Cat  ~/.mysql_history


爲了移除和禁用這個文件,可以將日誌發送到/dev/null


$export mysql_histfile=/dev/null


八:安全補丁


經常關注mysql官網的相關信息,進行補丁的查看和修復


九:mysql啓用日誌


用來記錄mysql實例對某種條件作出響應時寫入的文件,如錯誤日誌文件、二進制日誌文件、慢查詢日誌文件、查詢日誌文件


錯誤文件:通過 show variables like log_error' 查看日誌的放置路徑


Mysql中經常用到的是二進制日誌和redo log,二者簡單的區別在於:


二進制日誌文件會記錄所有與mysql相關的日誌記錄,包括innodbmyisambdb等其他存儲引擎日誌,而innodbredo log只存儲有關的本身事務日誌。


二進制日誌文件,不管日誌的記錄格式是statement或者ROW或者mixed,其記錄的都是一個事務的具體操作。而innodbredo log記錄的關於每個頁的更改的物理情況


日誌的寫入時間:二進制日誌寫入是在事務提交前進行記錄的,而事務進行的過程中,不斷有重做日誌條目被寫入到redo log


啓用二進制日誌:


log-bin=mysql-bin 一般是放在了mysqldatadir


十:mysql的數據備份


Mysql的備份方式有:mysqldump,直接copy文件,以及在線備份工具:xtrabackup


Mysqldump和直接copy文件對 myisam的存儲引擎比較方便,


借用工具:xtrabackup 可以在線備份innodb的數據文件


簡單的描述下二者的操作原理


Mysqldump 採用SQL級別的備份機制,它將數據表導成 SQL 腳本文件,在不同的 MySQL 版本之間升級時相對比較合適,建議加上--opt參數,快速的導入和導出



對於InnoDBXtraBackup基於InnoDBcrash-recovery功能進行備份。



crash-recovery是這樣的:InnoDB維護了一個redo log,又稱爲 transaction log,也叫事務日誌,它包含了InnoDB數據的所有改動情況。InnoDB啓動的時候先去檢查datafiletransaction log,然後應用所有已提交的事務並回滾所有未提交的事務。


XtraBackup在備份的時候並不鎖定表,而是一頁一頁地複製InnoDB的數據,與此同時,XtraBackup還有另外一個線程監視着transactions log,一旦log發生變化,就把變化過的log pages複製走(因爲transactions log文件大小有限,寫滿之後,就會從頭再開始寫,新數據可能會覆蓋到舊的數據,所以一旦變化就要立刻複製走)。在全部數據文件複製完成之後,停止複製logfile



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章