一、配置口令复杂度策略
show variables like 'plugin_dir';
show plugins;
安装密码插件
install plugin validate_password soname 'validate_password.so';
密码策略参数
mysql>show variables like 'validate%';
#永久生效
[mysqld]
plugin-load-add=validate_password.so
#服务器在启动时加载插件,并防止在服务器运行时删除插件。
validate-password=FORCE_PLUS_PERMANENT
卸载插件
uninstall plugin connection_control_failed_login_attempts
二、配置口令有效期策略
mysql
alter user 'root'@'%' password expire interval 90 day;
三、配置登录失败处理及连接超时自动退出策略
#登录错误次数限制插件
install plugin connection_control soname "connection_control.so";
#为了把错误次数记录到表中
install plugin connection_control_failed_login_attempts soname 'connection_control.so';
#设置策略
set global connection_control_failed_connections_threshold = 5;
set global connection_control_max_connection_delay = 1800000;
set global connection_control_min_connection_delay = 1800000;
#永久生效
[mysqld]
plugin-load-add = connection_control.so
connection-control = FORCE
connection-control-failed-login-attempts = FORCE
connection_control_min_connection_delay = 1000
connection_control_max_connection_delay = 86400
connection_control_failed_connections_threshold = 3
三、开启安全审计行为
建议数据库开启安全审计,对操作行为进行审计、对日志进行保护,定期进行备份,保存6个月以上。
show variables like 'general%'; -- 查看日志是否开启
show variables like 'log_output'; -- 看看日志输出类型 table或file
set global general_log=on; -- 开启日志功能
set global general_log_file='tmp/general.lg'; -- 设置日志文件保存位置
set global log_output='file'; -- 设置输出类型为file
#永久生效
[mysqld]
general-log=1
#日志切割设置,利用logrote实现一天一个压缩日志。
cp support-files/mysql-log-rotate /etc/logrotate.d/
vim /etc/logrotate.d/mysql-log-rotate
chmod 644 /etc/logrotate.d/mysql-log-rotate
logrotate -f /etc/logrotate.conf
四、配备网络管理员,安全管理员
MySQL可以通过创建不同的用户和角色来配备网络管理员和安全管理员。
- 创建网络管理员用户
可以使用以下命令创建一个具有网络管理员权限的用户:
CREATE USER 'netadmin'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'netadmin'@'localhost';
这将创建一个名为“netadmin”的用户,并授予该用户在所有数据库和表上执行任何操作的权限。
- 创建安全管理员用户
可以使用以下命令创建一个具有安全管理员权限的用户:
CREATE USER 'secadmin'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO 'secadmin'@'localhost';
这将创建一个名为“secadmin”的用户,并授予该用户在MySQL系统数据库上执行SELECT、INSERT、UPDATE和DELETE操作的权限。
- 创建角色
除了创建用户,还可以创建角色来分配权限。可以使用以下命令创建一个名为“netadmin_role”的角色,并将其授予在所有数据库和表上执行任何操作的权限:
CREATE ROLE 'netadmin_role';
GRANT ALL PRIVILEGES ON *.* TO 'netadmin_role';
然后,可以将“netadmin”用户添加到“netadmin_role”角色中:
GRANT 'netadmin_role' TO 'netadmin'@'localhost';
这将使“netadmin”用户继承“netadmin_role”的所有权限。
类似地,可以创建一个名为“secadmin_role”的角色,并将其授予在MySQL系统数据库上执行SELECT、INSERT、UPDATE和DELETE操作的权限:
CREATE ROLE 'secadmin_role';
GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO 'secadmin_role';
然后,可以将“secadmin”用户添加到“secadmin_role”角色中:
GRANT 'secadmin_role' TO 'secadmin'@'localhost';
这将使“secadmin”用户继承“secadmin_role”的所有权限。
网友评论