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)、删除 除 [email protected] 及 [email protected]$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