一、身份鉴别
1、列出 MySQL 数据库中的所有用户。
SELECT user, host FROM mysql.user;
2、删除默认无用用户。
DROP USER 'username'@'host';
3、检查并列出当前 MySQL 密码复杂度插件的状态。
SHOW PLUGINS;
4、设置复杂度符合标准
关于 mysql 密码策略相关参数;
validate_password_length 固定密码的总长度;
validate_password_dictionary_file 指定密码验证的文件路径;
validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;
validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
validate_password_special_char_count 整个密码中至少要包含特殊字符的个数;
5、查询 MySQL 失败锁定策略的配置。
SHOW VARIABLES LIKE 'max_connect_errors';
6、设置锁定策略符合安全标准
SET GLOBAL max_connect_errors = X;
7、检查 MySQL 是否启用了 SSL。
SHOW VARIABLES LIKE 'have_ssl';
二、访问控制
1、创建三个 MySQL 角色。
CREATE ROLE role1, role2, role3;
2、分配读取所有数据权限给创建的三个角色。
GRANT SELECT ON database.* TO role1, role2, role3;
三、安全审计
1、查询 MySQL 是否开启审计功能。
SHOW VARIABLES LIKE 'audit_log';
2、开启 MySQL 审计功能。
SET GLOBAL audit_log = ON;
3、创建 MySQL 审计用的数据库和表。
CREATE DATABASE auditdb;
USE auditdb;
CREATE TABLE audit_table (...) ENGINE = AUDIT;
CREATE TABLE audit_table(id INT AUTO_INCREMENT PRIMARY KEY, action VARCHAR(50), INSERT, UPDATE, DELETE)user VARCHAR(50),timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, details TEXT ) ENGINE=InnoDB;
4、给用户添加相应的权限。
GRANT ALL PRIVILEGES ON auditdb.* TO 'username'@'host';
5、配置 MySQL 以记录二进制日志。
[mysqld]
log-bin = /path/to/binlog
6、下载并安装 MariaDB Audit Plugin 插件。
INSTALL PLUGIN server_audit SONAME 'server_audit';
四、入侵防范
1、检查 MySQL 用户登录地址是否受到 IP 限制。
SELECT * FROM mysql.user WHERE host != 'localhost';
2、设置只有localhost能登陆root用户
UPDATE mysql.user SET host = 'localhost' WHERE user = 'root' AND host = '127.0.0.1';
五、数据完整性
1、在 MySQL 中执行数据完整性检查。
CHECK TABLE tablename;
2、配置 MySQL 数据库进行定期备份。
使用定时任务或脚show本配置备份。