MySQL实现身份鉴别的项目实践 |
||||||||||||||||||
本文标签:MySQL?身份鉴别 前言MySQL的身份鉴别是数据库安全的核心命题之一 。在每日“拧螺丝”的工作中,我们的开发人员可能会忽略这个问题 。正因如此,博主以这个契机,向大家做一次专题介绍 。看过此文,相信你能够“上应付得了等保,下对得起公司” 。 Q:如何保障MySQL数据库身份鉴别的有效性
如何保障MySQL数据库身份鉴别,有很多手段进行识别 。博主通过SQL的方式,进行逐一介绍 。 一、有效性检查1. 用户唯一检查授权的用户是否唯一: SELECT USER, HOST FROM mysql.user; 2. 启用密码验证检查PLUGIN是否包含 -- mysql_native_password,身份验证插件 SELECT USER, HOST, PLUGIN FROM mysql.user; 3. 是否存在空口令用户检查 -- authentication_string,加密后密码,即执行password()后的值 SELECT USER, HOST, PLUGIN, authentication_string FROM mysql.user; 4. 是否启用口令复杂度校验检查 -- 如果为空,证明未启用该插件 SHOW VARIABLES LIKE 'validate%'; 5. 是否设置口令的有效期-- 默认0,永不过期 SHOW VARIABLES LIKE '%default_password_lifetime%'; 6. 是否限制登录失败尝试次数-- 如为空,代表未设置,可无限尝试 SHOW VARIABLES LIKE '%connection-control-failed-connections-threshold%'; 7. 是否设置(超过尝试次数)锁定的最小时长-- 如为空,代表未设置,永不锁定 SHOW VARIABLES LIKE '%connection-control-min-connection-delay%'; 8. 是否设置保持登录的有效期-- 默认0,代表永不退出登录 SHOW VARIABLES LIKE '%wait_timeout%'; 二、应对方案针对第一部分的有效性检查中,涉及不满足的配置项,我们可以通过以下措施加以弥补 。 1. 空口令问题如存在空口令,可通过 alter user [USER]@[HOST] identified by '[PASSWORD]'; 2. 口令复杂度如未启用口令复杂度,可能会遇到暴力 破 解,因此建议设置相关项 。 2.1 安装插件MySQL默认预留了口令复杂度插件: INSTALL PLUGIN validate_password SONAME 'validate_password.so'; 查看是否安装成功(如看到以下记录,代表成功): SHOW VARIABLES LIKE 'validate%'; 2.2 参数解释为加深各位盆友的理解,博主对返回的参数加以说明 。 2.2.1 validate_password_policy MySQL的密码策略包含以下3种: 2.2.2 配套参数
2.3 调整参数掌握了参数特征后,我们可以按需调整相关参数的值,以满足安全需要,执行命令如下: --必须以root身份执行,且拥有super权限 。 set global [具体参数名称]=[VALUE]; 3. 口令有效期如满足口令定期更换的安全要求时,必须设置口令的有效期: -- 必须以root身份执行,设置有效期为90天 set global default_password_lifetime=90; 4. 设置登录失败处理假如要求你限制登录失败的次数以及失败次数达到上限后锁定用户,你该怎么办?先不急,且听博主分解 。 4.1 安装插件满足上述要求,需要安装MySQL自带的插件: -- 必须以root身份执行 INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so'; INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so'; 4.2 参数解释
4.3 调整参数掌握了参数特征后,我们同样可以按需调整相关参数的值,执行命令如下: --必须以root身份执行,且拥有super权限 。 set global [具体参数名称]=[VALUE]; 5. 设置登录保持时间设置保持登录的有效期,过期自动退出登录状态: -- 必须以root身份执行,设置保持登录的有效期为1800秒 set global wait_timeout=1800; 结语本文通过案例介绍的方式,针对MySQL不同的安全场景,制定差异化的解决办法 。当然完成该过程离不开MySQL自带的插件或访问控制能力 。 到此这篇关于MySQL实现身份鉴别的示例代码的文章就介绍到这了,更多相关MySQL 身份鉴别内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |