Mysql安全加固

因等保要求

1 限制登录失败次数


show variables like "%plugin_dir%"; 插件安装目录

install plugin CONNECTION_CONTROL soname 'connection_control.so';
install plugin CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS soname 'connection_control.so';  

安装完执行show variables like '%connection_control%';查看插件可设置选项

connection-control-failed-connections-threshold=  #登陆失败次数限制
connection-control-min-connection-delay  #限制重试时间,此处为毫秒,注意按需求换算
临时设置

SET GLOBAL connection-control-failed-connections-threshold = 5

永久设置

在my.cnf配置文件里面写入

connection-control-failed-connections-threshold=5  #重启生效

如果不需要了通过UNINSTALL PLUGIN plugin_name; 卸载插件,通过show plugins;查看插件名称

2 设置超时自动退出


临时 set wait_timeout=600 秒为单位

永久 wait_timeout=600 放到配置文件重启生效

3 密码复杂度


INSTALL PLUGIN validate_password SONAME 'validate_password.so'; #下载插件

显示该插件的功能
show variables like 'validate_password%';
功能解释
validate-password=ON/OFF/FORCE/FORCE_PLUS_PERMANENT: 决定是否使用该插件(及强制/永久强制使用)。
validate_password_dictionary_file:插件用于验证密码强度的字典文件路径。
validate_password_length:密码最小长度。
validate_password_mixed_case_count:密码至少要包含的小写字母个数和大写字母个数。
validate_password_number_count:密码至少要包含的数字个数。
validate_password_policy:密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG。
validate_password_special_char_count:密码至少要包含的特殊字符数。
其中,关于validate_password_policy-密码强度检查等级:
0/LOW:只检查长度。
1/MEDIUM:检查长度、数字、大小写、特殊字符。
2/STRONG:检查长度、数字、大小写、特殊字符字典文件。
SET GLOBAL  plugin_name = num  来临时设置

密码过期设置

show variables like 'default_password_lifetime';
default_password_lifetime #密码过期时间
SET GLOBAL default_password_lifetime = 90; 修改密码过期时间

SET GLOBAL plugin_name = num 来临时设置

永久设置重启生效

[mysqld] my.cnf里面
plugin-load-add=validate_password.so
validate_password = on
validate_password_policy = 1
validate_password_length=8

4 General_log 详解


1.介绍
开启 general log 将所有到达MySQL Server的SQL语句记录下来。
一般不会开启开功能,因为log的量会非常庞大。但个别情况下可能会临时的开一会儿general log以供排障使用。
show variables like 'general_log';  -- 查看日志是否开启
set global general_log=on; -- 开启日志功能
show variables like 'general_log_file';  -- 看看日志文件保存位置
set global general_log_file='tmp/general.lg'; -- 设置日志文件保存位置

如果需要永久生效,还是得修改my.cnf/my.ini文件([mysqld]后中修改:general_log = 1)如下:
[mysqld]
general_log=ON 或者 general_log=1 二选一 1表示开启0关闭
general_log_file=[path[filename]] #日志文件所在目录路径,filename为日志文件名  

关闭general log

执行set global general_log=off;

清理general log文件
> mysql_general_log.log

5 开启ssl加密登录传输


SHOW VARIABLES LIKE '%ssl%';   其中,have_ssl的值为YES表示MySQL服务器启用了SSL连接。
\s   查看SSL:   Not in use
show status like 'ssl_cipher';   如果没有启用SSL连接,命令行会返回一个空的输出。
select user,host,ssl_type from mysql.user; 显示用户是否开启ssl_type

可以自己使用openssl生成证书也可以使用mysql自带的加密工具mysql_ssl_rsa_setup生成证书

比如  mysql_ssl_rsa_setup -d=/data/  -v  #执行可以发现这条命令其实也是调用的openssl生成证书

#典型的选项是 --datadir指定创建文件的位置,以及 --verbose查看mysql_ssl_rsa_setup执行的 openssl命令 。
-d, --datadir=name    数据目录路径
-?, --help    显示帮助信息并退出
-s, --suffix=name X.509    证书通用名称属性的后缀
–uid=name    用于文件权限的有效用户的名称
-v, --verbose    详细模式
-V, --version    显示版本信息并退出
将证书放入配置文件  重启生效

[mysqld]
ssl-ca=/date/mysql-server.crt
ssl-cert=/date/mysql-server.crt
ssl-key=/date/mysql-server.key

登录注意!! 此时需要指定证书不然无法登录

mysql -uuser -ppass \

 --ssl-ca=/date/mysql-server.crt \

--ssl-cert =/date/mysql-server.crt \

--ssl-key=/date/mysql-server.key  ##证书位置以你实际位置为准

小tips

#强制用户使用ssl连接登录时加上选项REQUIRE SSL

已有用户
ALTER USER 'test'@'%' REQUIRE SSL;     或者 grant usage on *.* to 'test'@'%' require ssl;  
FLUSH PRIVILEGES;
新建用户
mysql> create user 'test'@'%' identified by 'test@1234' REQUIRE SSL;
Query OK, 0 rows affected (0.00 sec)

取消ssl登录执行  ALTER USER test REQUIRE NONE;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值