MySQL5.6及以下的版本,安裝后默認自帶一個test的數據庫,並且在MySQL5.6中,mysql.user用戶表中帶有用戶名為空的用戶,等等的默認設置,這些都是不安全的,容易給他人利用的機會。所以需要在安裝MySQL后做些優化,加強MySQL數據庫的安全性。
- 1、操作系統與MySQL的基本環境信息:
操作系統版本、操作系統內核版本:lsb_release -a、uname -r


MySQL數據庫版本:mysql> select version();
MySQL數據庫安裝后默認的數據庫列表:mysql> show databases;

MySQL數據庫安裝后默認的用戶列表:mysql> select user, host from mysql.user;

- 2、修正方法:
1)、刪除 除 root@localhost 及 root@$hostname 外的其他賬戶:
mysql> drop user ''@'localhost';
mysql> drop user ''@'apptest';
mysql> drop user 'root'@'::1'; # IPV6
mysql> drop user 'root'@'apptest';
mysql> select user, host from mysql.user; # 驗證是否刪除成功
2)、刪除test數據庫:
mysql> drop database test;
mysql> show databases; # 驗證是否刪除成功
3)、修改默認的root密碼:
mysql> set password for 'root'@'localhost' = password("chiscdc");
# 最好是通過下面的mysqladmin交互命令進行重新設置root密碼。
shell> mysqladmin -uroot -hlocalhost -p -S /application/mysql/3306/mysql.sock password
shell> mysqladmin -uroot -h<hostname> -p -S /application/mysql/3306/mysql.sock password
- 3、平時對數據庫用戶的授權問題:
堅持最小化權限的原則,對一個庫有只有一個專門的用戶有操作權限;即在授權時,需要指定數據庫名、主機名,且主機名中不要包含任何通配符“%”。
mysql> grant all privileges on jhmyTest.* to 'test'@'192.168.231.9/255.255.255.0' identified by "chiscdc";
mysql> flush privileges;
mysql> show grants for 'test'@'192.168.231.9/255.255.255.0'; # 查看用戶權限

4、其他安全注意事項,防止MySQL數據庫密碼的泄漏:
禁止在shell命令行中輸入數據庫密碼:當在shell命令行中輸入明文密碼時,會被Linux記錄到操作歷史記錄文件中(可以通過 history命令查看),從而導致密碼泄漏。
1)、通過mysqladmin命令修改mysql用戶密碼:
錯誤做法,在pasword后直接跟密碼字符串: shell> mysqladmin -uroot -p -S /application/mysql/3306/mysql.sock password "chiscdc"

正確做法:不在password關鍵字后寫任何字串,通過交互方式輸入新的密碼: shell> mysqladmin -uroot -p -S /application/mysql/3306/mysql.sock password

2)、通過mysql命令登錄mysql:
錯誤做法,在-p后直接跟密碼字符串: shell> mysql -uroot -pchiscdc -S /application/mysql/3306/mysql.sock

正確做法:不在-p后寫任何字串,通過交互方式輸入新的密碼: shell> mysql -uroot -p -S /application/mysql/3306/mysql.sock

3)、通過mysqldump命令進行定時備份數據庫:
錯誤做法,在備份腳本中寫明數據庫密碼,在-p后直接跟密碼字符串:
#!/bin/bash
# Backup the MySQL Database Scripts
user="root"
passwd="chiscdc"
mysqldump -u${user} -p${passwd} DBname > Dbname.sql
正確做法【官方文檔說是最安全的做法,
點此查看官方文檔說明】:通過mysql_config_editor命令行工具將MySQL用戶名、密碼、socket等寫入單獨的文件中(自動加密了),並且文件賦予只有該文件所屬用戶只讀權限(400),然后在腳本mysqldump命令中通過--defults-file參數讀取用戶名密碼:
shell> mysql_config_editor set --login-path=client --user=root --host=localhost --socket=/application/mysql/3306/mysql.sock --password
shell> mysql_config_editor print --all
設置后,在上面指定的host服務器上登錄mysql數據庫,也不需要輸入用戶名、密碼等。

新的備份腳本,也不需要指定主機名、用戶名、密碼等:
#!/bin/bash
# Backup the MySQL Database Scripts
mysqldump --all-databases > backup1.sql
# End Of File