因等保要求
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;