Mysql基础命令
create  USER 'new_user'@'localhost' IDENTIFIED BY 'password';				//创建用户
alter user 'root'@'%' identified with mysql_native_password by '********'; 		//修改密码
rename user 'root'@'%' to 'root'@'192.168.1.1';									//重命名
flush privileges;																//刷新权限
grant all privileges on *.* to 'root'@'192.168.1.%'; 							//赋予权限
revoke all privileges on *.* to 'root'@'%';										//收回权限
select current_user();												//查看当前登录的用户
select current_role(); 												//查看当前登录的角
mysqldump -uroot -p mysql>mysql.sql 									//导出mysql数据库
create database xiaozhou_db;									//创建xiaozhou数据库
show databases;															//展示所有数据库
drop database xiaohzou_db;													//删除数据库
alter user 'root'@'localhost' identified with mysql_native_password by 'xlpszqdbb';	//修改密码
show variables like 'port';														//查看端口

ALTER USER 'existing_user'@'localhost' IDENTIFIED BY 'new_password';

show variables like 'validate%';
show variables like '%connection_control%';
show variables like ”%timeout%“

一 身份鉴别

MySQL数据库对于用户的标识和其它数据库有些不一样,不仅仅是用户名,而是username + host。MySQL从5.7以上开始,密码字段不是password,而是authentication_string。

要满足密码复杂度必须在my.ini配置文件中安装plugin-load-add=validate_password.dll(Windows/Linux为plugin-load-add=validate_password.so)插件。

select * from mysql.`plugin`;//查看插件

MySQL安全加固及等保测评_mysql

install plugin validate_password soname 'validate_password.so';

a) 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;

1.提示输入口令鉴别用户身份

1)尝试登录数据库,**执行mysql -u root -p(linux下)查看是否提示输入口令鉴别用户身份。**此处直接使用navicat 进行管理。

mysql -h localhost -u root -p123

MySQL安全加固及等保测评_mysql_02

2.查是否存在同名用户
select user, host FROM mysql.user

结果输出用户列表,查者是否存在相同用户名。结果默认不存在同名用户。

查询是否在空口令用户:
select * from mysql.user where length(password)= 0 or password is null

或者

select user,authentication_string from user;

mysql 5.7以上识别第二条命令)通过查看不存在空口令用户。

4)执行如下语句查看用户口今复杂度相关配置:

show variables like 'validate%';

默认情况下未配置,为空。

要满足密码复杂度必须在my.ini配置文件中安装plugin-load-add=validate_password.dll(Windows/Linux为plugin-load-add=validate_password.so)插件。

b) 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;

登录失败功能也需要mysql安装connection_control.dll或者connection_control.so插件才能实现

1)询问管理员是否采取其他手段配置数据库登录失败处理功能。

2)执行show variables like '%connection_control%';或核查my.cnf或者my.ini文件,应设置如下参数:

max_connect_errors=100

validate_password_policy:密码安全策略,默认MEDIUM策略

validate_password_dictionary_file:密码策略文件,策略为STRONG才需要

validate_password_length:密码最少长度

validate_password_mixed_case_count:大小写字符长度,至少1个

validate_password_number_count :数字至少1个  validate_password_special_char_count:特殊字符至少1个
  1. show variables like ”%timeout%“,查看返回值。默认Wait_ timeout: 一个连接connection空闲超过8个小时(默认值28800秒),MySQL 就会自动断开这个连接。默认不符合,时间太长。

MySQL安全加固及等保测评_mysql_03

当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;

1)是否采用加密等安全方式对系统进行远程管理

是否用户都是localhost,全为localhost则为本地管理。不适用。

2)若存在远程管理,执行

show variables like "%have_ssl%"

者show variables like "%have_openssl%"

查看是否支持ssl的连接特性,若为disabled说明此功能没有激活,或执行\s查看是否启用SSL。

MySQL安全加固及等保测评_mysql_04

MySQL安全加固及等保测评_mysql_05

二、访问控制

a) 应对登录的用户分配账户

1)执行语句select user,host FROM mysql.user

输出结果结合访谈管理员是否存在网络管理员,安全管理员,系统管理员等多个账户,且分配了相应权限。

show grants for 'XXXX'@' localhost':

查看其他管理员用户账号的权限,是否只存在特定用户如root 用户存在权限分配的权限。其他普通用户如test用户应无Grant option 权限。

2.是否存在多余的、过期的账户,避免共享账户
select user,accounted _lock from user;

MySQL安全加固及等保测评_mysql_06

3.应授予管理用户所需的最小权限,实现管理用户的权限分离
select * from mysql.user

如除root外,任何用户不应该有mysql库user表的存取权限,禁止将fil、process、 super权限授予管理员以外的账户

2)查看用户权限表,并验证用户是否具有自身角色外的其他用户的权限。输入select \* from mysql.user where user="用户名"。

4.访问控制策略规定主体对客体的访问规则

select * from mysql.user -检查用户权限列

select * from mysql.db --检查数据库权限

select * from mysql.tables_priv 一检查用户表权限列

select * from mysql.columns_priv-检查列权限列管理员

三 安全审计

1.开启安全审计功能
show global variables like '%general%'。默认为OFF,不符合。应设置为ON为开启审计。

是否已开启审计general_log为ON。输入:select * from general_log;得知具体内容

2访谈是否存在第三方插件。

对于生产环境中任务繁重的MySOL数据库,启用审计会引起服务器的高昂成本,因此建议采用第三方数据库审计产品收集审计记录。

3.应对审计记录进行保护,定期备份
cp /var/log/audit/audit.log /path/to/backup/audit.log  //手动备份
gzip -c /var/log/audit/audit.log > /path/to/backup/audit.log.gz//压缩备份
crontab 定时定期自动备份

四 入侵防范

1.管理终端进行限制

user表中的Host值不为本地主机时,应指定特定IP地址,不应为%;

host表中指定用户帐户允许登陆访问的主机;在非信任的客户端以数据库账户登录应被提示拒绝,从其他子网登录,应被拒绝

GRANT ALL ON *.* TO 'root'@'myip.athome' //指定IP范问

2.版本补丁情况

show variables where variable_name like "version"

3.数据库定期漏扫