MySQL安全类设置

本文介绍的所有插件功能均基于MySQL5.7(5.7.22和5.7.28),操作系统环境均为Windows Server2008R2,同样适用于linux操作系统,只需要将插件后缀更改即可。

启用MySQL密码复杂度策略:
先决条件:先检查MySQL的版本,是否大于5.6以上,且MySQL的basedir下的lib\plugin目录中存在validate_password.dll的dll文件,linux下则为.so文件

处理办法:


1、查看是否安装密码复杂度的相关插件,查看输出是否有**validate_password**为名的行

show plugins;

2、安装、卸载插件

install plugin validate_password soname 'validate_password.dll'
uninstall plugin validate_password;

3、查看默认策略

show variables like  'validate_password%';

4、参数说明:
validate_password_policy 表示密码策略,默认为MEDIUM,有三个取值范围:
0 或者LOW 表示只需要符合密码长度即可 
1 或者MEDIUM 表示在满足LOW策略的同时,还需要满足至少有一个数字,一个大小写字母和特殊字符的设置
2 或者STRONG 表示满足MEDIUM策略的同时,密码不能存放在字典文件中
validate_password_length 最小程度 
validate_password_mixed_case_count  最少需要拥有的大小写字母数(同时拥有大写和小写字母) 
validate_password_number_count    最少需要拥有的数字个数
validate_password_special_char_count  最少需要拥有的特殊字符数

启用MySQL登陆失败处理策略
先决条件:MySQL的basedir\lib\plugin目录中存在connection_control.dll的dll文件,linux下则为.so文件
处理办法:

1、查看是否安装密码复杂度的相关插件,查看输出是否有**connection_control**为名的行

show plugins;

2、安装、卸载插件

install plugin connection_control soname 'connection_control.dll'
uninstall plugin connection_control;

3、查看默认策略

show variables like  'connection%';

4、参数说明:

connection_control_failed_connections_threshold  允许失败次数,默认为3次
connection_control_max_connection_delay          锁定的最长时间
connection_control_min_connection_delay          锁定的最短时间,单位为毫秒,默认值为15、临时设置:

set global connection_control_failed_connections_threshold = 5;
set global connection_control_min_connection_delay= 600000;

需要注意的是:若需要重启后继续生效,将此两个值写入配置文件中即可。

超时设置

处理办法:

查看超时设置:show global variables like '%timeout%';
1、临时生效:

set global wait_timeout=600;
set global interactive_timeout=600;

2、永久生效写入配置文件即可

启用密码有效期设置

处理办法:

1、针对全局生效的密码有效期设置,需要在配置文件中加入default_password_lifetime=90配置,或者临时生效可以设置全局参数

 set global default_password_lifetime=90;

2、针对单用户设置密码有效期

alter user testuser@ "%" password expire interval 30 day

3、禁用密码有效期设置
alter user testuser@ "%" password expire never;

//将用户的有效期调整为默认设置值
alter user testuser@"%" password expire default;

MySQL资源限制

资源限制通过mysql.user中的max_questions、max_updates、max_connections字段进行查看
1、设置时间段(一小时)内用户的最大查询数量

grant all on *.* to test@ '%' with max_queries_per_hour 1000

2、设置时间段(一小时)内用户的最大更新数量

grant all on *.* to test@ '%' with max_updates_per_hour 300

3、设置时间段(一小时)内用户累计能打开的最大连接数
需要注意的是:此数为累加数,一旦达到最大值,将无法打开新连接

grant all on *.* to test@ '%' with max_connections_per_hour 3000;


4、设置用户最大连接数
需要注意的是:此数同max_connections_per_hour不同,max_connections为累加值,及时在一小时内有用户退出,其也不能再建立连接,
但是max_user_connections 则不同,可以理解为时间段内同时连接的数量,有一个连接断开,则可以再建立一个连接。

grant all on *.* to test@'%' with max_user_connections 300


5、清除计数器内的连接数记录

flush user_resources;

MySQL审计功能

参考:https://mariadb.com/kb/en/library/mariadb-audit-plugin/
企业版自带审计功能,社区版需要第三方提供,主要有McAfee MySQL Audit plugin、MariaDB Audit Plugin。
McAfee使用的人较多,但从官网上似乎只能找到linux版的审计插件,无法在windows下使用。
https://bintray.com/mcafee/mysql-audit-plugin/release
MariaDB提供windows下的审计插件。
https://downloads.mariadb.com/MariaDB/mariadb-10.3.20/winx64-packages/

1、安装插件
install plugin server_audit soname 'server_audit.dll'

2、设置审计参数
'''
//开启审计功能
set global server_audit_logging=on
//设置审计的动作,记录连接登入和登出、DDL语言的操作
set global server_audit_events='CONNECT,QUERY_DDL'
//审计文件的存放路径,创建并授权(我这里测试的环境是5.7.28上面使用的MariaDB-10.3.20-winX64环境中的server-audit.dll,修改默认路径后,其会自动创建对应的文件,默认存在data/server-audit.log)
set global server_audit_file_path=/data/mysql/audit/server-audit.log
//记录特定用户的操作
set global server_audit_incl_users = test ;
//记录除特定用户外的操作
set global server_audit_excl_users = root;
//设置单个文件的大小
set global server_audit_file_rotate_size=200000000
//设定审计日志的文件数量,为0则不轮转
set global server_audit_file_rotations=200
//开启日志轮转
set global server_audit_file_rotate_noe=on
//审计日志记录项
[时间戳记][服务器主机][用户名][主机][连接ID][查询ID][操作类型][数据库][对象][重新编码]

你可能感兴趣的:(数据库那些事)