Mysql5.6以下版本不能自定义密码复杂度和更换周期;
Mysql5.6.6以上版本,使用命令
#mysql> show variables like ‘validate%’;
核查数据库是否配置密码复杂度策略,如:
validate_password_length 8
validate_password_mixed_case_count 1
validate_password_number_count 1
validate_password_policy MEDIUM
validate_password_special_char_count 1
其中validate_password_policy不能配置为LOW,须为MEDIUM或STRONG。
Mysql5.7.4以上版本,登录数据库,使用命令
#mysql> show variables like ‘default_password_lifetime’;
或查看数据库所在安装目录下my.cnf/my.ini文件,其中是否设置全局变量default_password_lifetime来限制密码过期策略。
登陆失败处理和超时
Mysql数据库不能自定义登录失败处理策略,使用命令show plugins;或
select * from information_schema.plugins where plugin_name like ‘%connection%’;
查看是否安装connect_control和connect_control_failed_login_attempts插件。如果已经安装相关插件,使用命令show variables like ‘conn%control%’,查看是否配置登录失败锁定策略。
注:
connection_control_failed_connections_threshold:登录失败次数阈值。connection_control_min_connection_delay:登录失败后最短锁定毫秒数。connection_control_max_connection_delay:登录失败后最长锁定毫秒数。
#mysql> show variables like ‘%timeout%’;
查看interactive_timeout(针对交互式连接)的值是否合理;
测试长时间不操作,数据库是否能自动断开连接。
远程管理
Mysql数据库为安全考虑应禁用远程管理功能,以保证管理数据库的用户首先需要登录操作系统。使用命令
select user, host from mysql.user where host!=’localhost’
查看user表中是否不存在可远程管理的账户。核查操作系统配置的安全策略能否满足要求;
如果使用了远程管理功能,则使用数据库管理客户端连接数据库时,口令默认使用哈希算法加密传输。使用抓包工具测试是否能获取数据库明文口令信息。
注:MySQL数据库默认符合。
2、访问控制
权限分配
select * from mysql.user;和select * from mysql.db;
查看数据库中用户的权限策略,是否存在不必要的权限设置;
登录mysql,执行show database like ‘test’;
核查是否已删除测试数据库;
select user, host from mysql.user where host!=’localhost’
查看是否限制数据库管理员的远程登录权限。
重命名默认账户
登入mysql,执行select user from mysql.user
查看是否存在未更名的默认账户,如root用户;注:修改root账户名可能导致应用程序错误,故不强制要求重命名。
Mysql5.7以上版本,使用命令select user,host,account_locked from mysql.user;
核查mysql.session和mysql.sys默认账户是否已锁定(默认锁定);
在数据库服务器使用命令grep “temporary password” /var/log/mysqld.log
查看数据库安装时的随机密码,并使用该密码尝试登录数据库,核查是否成功。
删除过期账户
进入mysql,执行select user from mysql.user
查看数据库所有用户,并访谈管理员说明每个用户的功能,核查是否存在多余或过期账户;
进入mysql,执行select user from mysql.user
查看数据库所有用户。访谈数据库管理员、安全员和审计员,核查不同用户是否采用不同账户登录系统。
最小权限、权限分离
进入mysql,执行select * from user;
查看用户权限列表,一般用户应当只有select、insert或update权限,只有管理员才能有所需的管理权限;
MySQL数据库不具备安全标记功能,默认不符合;
3、安全审计
进入mysql,执行show variables like ‘%log%’;
查看是否开启了重要日志功能,如错误日志(log_error)、查询日志(general_log)、二进制日志(log_bin);