MySQL安装后的基本安全优化

Posted Jiangmingwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL安装后的基本安全优化相关的知识,希望对你有一定的参考价值。

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
 

以上是关于MySQL安装后的基本安全优化的主要内容,如果未能解决你的问题,请参考以下文章

CentOS6.x系统安装后的基本优化与安全设置

在Ubuntu上使用apt-get安装MySQL+安全优化

在Ubuntu上源码安装MySQL+安装问题解决+安全优化

在CentOS上编译安装MySQL+安装问题解决+安全优化

XP系统安装好后的优化设置详解

CentOS最小安装后的优化