目录

  • 进入MySQL数据库:
  • 账号
  • 以普通账户安全运行mysqld,禁止mysql以管理员账号权限运行
  • 操作指南
  • 检查方法
  • 应按照用户分配账号,避免不同用户间共享账号
  • 操作指南
  • 检测方法
  • 应删除或锁定与数据库运行、维护等工作无关的账号
  • 操作指南
  • 检测方法
  • 口令
  • 检查帐户默认密码和弱密码
  • 操作指南
  • 检测方法
  • 授权
  • 在数据库权限配置能力内,根据用户的业务需要,配置其所需的最小权限。
  • 操作指南
  • 检测方法
  • 日志
  • 数据库应配置日志功能
  • 操作指南
  • 检测方法
  • 补丁
  • 系统安装了最新的安全补丁 (注:在保证业务及网络安全的前提下,经过兼容性测试后)
  • 操作指南
  • 检测方法
  • 网络连接
  • 禁止网络连接,防止猜解密码攻击,溢出攻击和嗅探攻击。(仅限于应用和数据库在同一台主机的情况)
  • 操作指南
  • 检测方法
  • 可信IP地址访问控制
  • 通过数据库所在操作系统或防火墙限制,只有信任的IP地址才能通过监听器访问数据库。
  • 操作指南
  • 检测方法
  • 禁止非授权用户访问本地文件
  • 连接数设置
  • 根据机器性能和业务需求,设制最大最小连接数。
  • 操作指南
  • 检测方法


进入MySQL数据库:

命令:mysql -u root -p

账号

以普通账户安全运行mysqld,禁止mysql以管理员账号权限运行
操作指南
  • 参考配置操作
    Unix 下以通过在/etc/my.cnf中设置:

[mysql.server]
user=mysql

vim /etc/my.cnf

mysql数据库等保加固 mysql安全加固_mysql

  • 补充操作说明
    计算机入侵数据库是非常危险的,因此必须要用普通用户登录数据库,来进行操作,因此有必要对一些主机操作权限
    如下图所示:授权给部分主机权限
检查方法
  • 判定条件

各种操作系统下以管理员权限运行。
Unix 下禁止以 root 账号运行 mysqld;

  • 检测操作

检查进程属主和运行参数是否包含–user=mysql类似语句:

#ps -ef | grep mysqld
#grep -i user /etc/my.cnf

这两行命令自己下去敲去,看是否包含-user=mysql类似语句。

应按照用户分配账号,避免不同用户间共享账号
操作指南
  • 参考配置操作

//创建用户,并指定特定用户,特定IP登录数据库
create user xxx@‘指定ip地址’ identified by ‘asyaxy’;
这样就创建了一个名为xxx的用户,密码为asyaxy,然后登录。
登录:mysql -u xxx -p asyaxy -h 192.168.2.114

mysql> mysql> insert into
mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject)values(“localhost”,“pppadmin”,password(“passwd”),",",");
这样就创建了一个名为:phplamp密码为:1234的用户。

//然后登录一下。

mysql>exit;

@>mysql -u phplamp -p
@>输入密码
mysql>登录成功

  • 补充操作说明
    具体操作跟着上面那些命令敲一下即可
检测方法
  • 判定条件
    不用名称的用户可以连接数据库
  • 检测操作
    使用不同用户连接数据库
应删除或锁定与数据库运行、维护等工作无关的账号
操作指南
  • 参考配置操作

DROP USER 语句用于删除一个或多个MySQL账户。要使用 DROP USER,必须拥有mysql 数据库的全局 CREATEUSER 权限或 DELETE 权限。
账户名称的用户和主机部分与用户表记录的User和Host列值相对应。
使用 DROPUSER,您可以取消一个账户和其权限,操作如下: DROP USER user;
该语句可以删除来自所有授权表的帐户权限记录。

先对账户进行筛选,找出无用账户,并删除
查看筛选:select user , host , password from mysql.user;
删除用户:drop user ‘’@‘mysql’, ‘’@‘localhosy’, ‘root’@’::1’,‘root’@‘mysql’;
再次查看是否删除成功

  • 补充操作说明

要点:
DROP USER 不能自动关闭任何打开的用户对话。而且,如果用户有打开的对话,此时取消用户,则命令不会生效,直到用户对话被关闭后才生效。一旦对话被关闭,用户也被取消,此用户再次试图登录时将会失败。

检测方法
  • 检测操作:

mysql 查看所有用户的语句

输入指令

select user();

select user ,host ,password from mysql.user;

依次检查所列出的账户是否为必要账户,删除无用户或过期账户。

mysql数据库等保加固 mysql安全加固_mysql_02


注:无关的账号主要指测试帐户、共享帐号、长期不用账号(半年以上不用)等

口令

检查帐户默认密码和弱密码
操作指南
  • 参考配置操作
    修改帐户弱密码
    如要修改密码,执行如下命令:

mysql数据库等保加固 mysql安全加固_中间件_03

mysql> update user set password=password(test!p3’) where user=root’;
mysql> flush privileges;

  • 补充操作说明、
检测方法
  • 判定条件
    密码长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类中至少3类。
    四分之三原则
  • 检测操作
    检查本地密码:(注意,管理帐号 root 默认是空密码)

mysql> use mysql;
mysql> select Host,User,Password,Select_priv,Grant_priv from user;

授权

在数据库权限配置能力内,根据用户的业务需要,配置其所需的最小权限。
操作指南
  • 参考配置操作
    合理设置用户权限,撤销危险授权
  • 补充操作说明
检测方法
  • 判定条件
    确保数据库没有不必要的或危险的授权
  • 检测操作
    查看数据库授权情况:
    SHOW GRANTS FOR ; ‘xxx’@‘localhost’
    授权并创建用户,给定密码:
    grant 权限 on 权限范围 to 用户 identified by ‘密码’
    移除访问权:
    REVOKE SELECT ON 库名. 表名 FROM ‘xxx’@‘localhost’;
    FLUSH PRIVILEGES;

mysql> use mysql;
mysql> select * from user;
mysql> select * from db;
mysql> select * from host;
mysql> select *from tables_priv;
mysql>select * from columns_priv;

回收不必要的或危险的授权,可以执行revoke命令:

mysql> help revoke
 Name: ‘REVOKE’
 Description:
 Syntax:
 REVOKE
 priv_type [(column_list)]
 [priv_type[(column_list)]]…
 ON [object_type]
 {
 *
 | .
 | db_name.*
 | db_name.tbl_name
 | tbl_name
 | db_name.routine_name}     FROM user [,user]...

日志

数据库应配置日志功能
操作指南

mysql 有以下几种日志:

错误日志: -log-err
查询日志: -log (可选)
慢查询日志:-log-slow-queries (可选)
更新日志:-log-update
二进制日志: -log-bin

在mysql 的安装目录下,打开my.ini,在后面加上上面的参数,保存后重启 mysql 服务就行了。

例如:
#Enter a name for the binary log. Otherwise a default name will be used.
#log-bin=
#Enter a name for the query log file.Otherwise a default name will be used.
#log=
#Enter a name for the error log file.Otherwise a default name will be used.
log-error=
#Enter a name for the update log file. Otherwise a de fault name will be used.
#log-update=
上面只开启了错误日志,要开其他的日志就把前面的“#”去掉

  • 补充操作说明
    1、show variables like ‘log_%’;查看所有的log命令
    2、show variables like ‘log_bin’;查看具体的log命令
检测方法
  • 判定条件
    启用审核记录对数据库的操作,便于日后检查
  • 检测操作
    打开/etc/my.cnf文件,查看是否包含如下设置(没有加上就行):

[mysqld]
log = filename

补丁

系统安装了最新的安全补丁 (注:在保证业务及网络安全的前提下,经过兼容性测试后)
操作指南
  • 参考配置操作
    下载并安装最新mysql安全补丁
  • 补充操作说明
    安全答报和补丁下载网址是htp://www.mysql.com
检测方法
  • 判定条件
    确保数据库为企业版,并且安装了最新安全补丁。如果是不安全的社区版,建议替换为企业版(收费)
  • 检测操作
    使用如下命令查看当前补丁版本:

mysql> SELECT VERSION();

网络连接

禁止网络连接,防止猜解密码攻击,溢出攻击和嗅探攻击。(仅限于应用和数据库在同一台主机的情况)
操作指南
  • 参考配置操作
    如果数据库不需远程访问,可以禁止远程tcp/ip连接,通过在mysqld 服务器中参数中添加 --skip-networking 启动参数来使mysql 不监听任何TCP/IP连接,增加安全性。
    强迫MySQL仅监听本机,方法是在my.cnf的[mysqld]部分增加下面一行:
    bind-address=127.0.0.1
  • 补充操作说明
检测方法
  • 判定条件

远程无法连接

  • 检测操作

#cat /etc/my.cnf
#ps -ef | grep -i mysql

或从客户机远程 telnet mysqlserver 3306

可信IP地址访问控制

通过数据库所在操作系统或防火墙限制,只有信任的IP地址才能通过监听器访问数据库。
操作指南
  • 参考配置操作
    执行命令:mysql> GRANT ALL PRIVILEGES ON db.*
    一> 一> TO 用户名@’IP子网/掩码’;
    只有通过指定 IP地址段的用户才可以登录
  • 补充操作说明
检测方法
  • 判定条件
    在非信任的客户端以数据库账户登陆被提示拒绝。
  • 检测操作
    用户从其它子网登录,将被拒绝
禁止非授权用户访问本地文件

禁用”LOAD DATA LOCAL INFILE”命令
以防止sql注入

  • 在某些情况下,LOCAL INFILE命令可被用于访问操作系统上的其它文件(如/etc/passwd),应使用下现的命令:
    mysql> SELECT load_file("/etc/passwd")
  • 为禁用LOCAL INFILE命令,应当在MySQL的/etc/my.cnf的配置文件的[mysqld]部分增加下面的参数:
    set-variable=local-infile=0

连接数设置

根据机器性能和业务需求,设制最大最小连接数。
操作指南
  • 参考配置操作
    编辑 MySQL 配置文件:my.cnf 或者是 my.ini
    在[mysqld]配置段添加:
    max_connections=1000
    保存,重启MySQL 服务。
检测方法
  • 检测操作
    用命令:SHOW [FULL] PROCESSLIST 显示哪些线程正在运行
    mysql admin -uroot -p variables
    输入 root 数据库账号的密码后可看到
    |max connections | 1000 |

mysql数据库等保加固 mysql安全加固_mysql_04