聊聊Mysql8.0中新增的密码策略

2024年 5月 28日 74.5k 0

MySQL 8.0 是 MySQL 数据库管理系统的一个重要版本更新,带来了众多显著的改进和新特性,极大地提升了数据库的性能、安全性和易用性。

而密码策略在数据库安全中起着关键作用,主要包括:

  • 防止未经授权访问:通过强密码和复杂度要求,防止暴力破解和字典攻击。
  • 增强密码管理:定期更换密码和限制密码重用,降低密码泄露风险。
  • 应对内部威胁:减少内部人员因密码弱或重复使用带来的安全漏洞。
  • 提高事件响应能力:通过密码锁定机制,防止多次失败登录尝试后的持续攻击。
  • 合规性和监管要求:确保符合相关法规和标准,避免法律风险。
  • 提升用户安全意识:促使用户养成良好的密码管理习惯,整体提升安全水平。
  • 概述

    那密码策略是什么呢?密码策略是指一组规则和要求,旨在确保用户密码的复杂性和安全性,包括密码长度、复杂度、过期时间等。其重要性在于防止未经授权访问,减少密码泄露风险,确保合规性,并提高整体系统的安全性。

    而在MySQL 8.0中,密码策略具有以下主要特点:

  • 密码过期:允许配置密码有效期,强制用户定期更新密码。
  • 密码历史:限制用户不能重复使用最近使用过的密码,增加密码更换的安全性。
  • 密码重用限制:防止使用旧密码,提高安全性。
  • 密码管理插件:通过插件实现更灵活的密码策略配置和管理。
  • 账户锁定:多次失败的登录尝试后锁定账户,防止暴力破解。
  • 密码策略配置详解

    新增caching_sha2_password鉴权插件

    caching_sha2_password鉴权插件是 MySQL 8.0 中用于用户认证的插件,具备以下特点:

  • 更强加密:使用 SHA-256 算法,提高密码加密的安全性。
  • 缓存机制:首次认证后缓存密码信息,加速后续连接的认证过程。
  • 双重认证:支持非交互式和交互式认证,确保安全的同时提升性能。
  • 防攻击能力:抵御彩虹表和暴力破解等常见密码攻击。
  • 可以通过以下命令查看当前数据库默认的鉴权插件是什么。

    show variables like 'default_authentication_plugin';
    

    聊聊Mysql8.0中新增的密码策略-1

    若是想查询各个用户的鉴权插件插件都是什么,则可以使用:

    select user,host,plugin from mysql.user;
    

    聊聊Mysql8.0中新增的密码策略-2

    这里可以看到我将root用户的鉴权插件改回了5.7的mysql_native_password,是因为
    在刚升级mysql8的时候,我们有小伙伴连不上mysql服务了。就是这个鉴权插件的问题,并且这只是个内部访问的测试环境,权衡之下将其改回了原来的mysql_native_password

    可以使用如下命令修改

    alter user 'root'@'%' identified with caching_sha2_password by '123456';
    

    密码过期策略

    我们可以设置在某个时间范围内将密码进行过期淘汰,可以通过全局的 default_password_lifetime 变量来进行设置,如果值为0表示,禁用密码淘汰策略,如果值为一个正数,表示在每N天必须要进行密码的修改。

    可以通过如下命令来查看当前数据库的密码过期时间:

    show variables like 'default_password_lifetime';
    

    聊聊Mysql8.0中新增的密码策略-3

    根据上文所说,这里的0就表示禁用了密码淘汰策略。

    可以使用如下命令去修改这个值:

    SET PERSIST default_password_lifetime = 180;
    

    聊聊Mysql8.0中新增的密码策略-4

    如果需要给某个特殊的用户设置密码过期时间,可以通过如下命令来实现:

    我们先创建一个用户luke:

    create user 'luke'@'%' password expire interval 90 day;
    

    这时候查看用户的密码过期时间

    select user,host,password_lifetime from mysql.user;
    

    聊聊Mysql8.0中新增的密码策略-5

    若是只想修改这一个用户的密码过期时间则使用如下命令:

    alter user 'luke'@'%' password expire interval 180 day;
    

    聊聊Mysql8.0中新增的密码策略-6

    当然也可以禁用某个用户的密码过期策略

    alter user 'luke'@'%' password expire never;
    

    聊聊Mysql8.0中新增的密码策略-7

    也可以指定某个用户使用全局的密码过期策略

    alter user 'luke'@'%' password expire default;
    

    聊聊Mysql8.0中新增的密码策略-8

    密码历史和重用限制

    在mysql8.0中允许对以前的密码重用进行限制,可以根据密码更改的次数和经过的时间同时建立重用限制。也就是说,前几次用过的密码不能用,多久时间内用过的密码不能用

    这里有两个值,几次和多久

    几次

    这个变量用于根据所需的最小密码更改次数来控制以前密码的重用

    show variables like 'password_history';
    

    聊聊Mysql8.0中新增的密码策略-9

    这样修改,我们设置最近修改过三次的密码不能再次使用

    SET PERSIST password_history = 3;
    

    若是想修改某一个用户的值,可以这样:

    alter user 'luke'@'%' password history 10;
    

    多久

    用于根据经过的时间控制以前密码的重用

    show variables like 'password_reuse_interval';
    

    聊聊Mysql8.0中新增的密码策略-10

    修改的话是这样,假如我们设置180天内用过的密码不能再使用。

    SET PERSIST password_reuse_interval = 180;
    

    若是想修改某一个用户的值,可以这样:

    alter user 'luke'@'%' password reuse interval 180 day;
    

    最终我们可以得到这样的结果,限制最近10次修改的密码不能重复使用,并且180天内使用过的密码不能再次使用。
    聊聊Mysql8.0中新增的密码策略-11

    密码锁定机制

    在mysql8.0中引入了账户锁定策略

    比如我们限制从同一主机来源的连续错误连接次数为 10 次(这个值默认是100)

    SET GLOBAL max_connect_errors = 10;
    

    我们创建一个用户并设置锁定策略:当用户连续 5 次登录失败时,账户会被锁定 2 天。

    CREATE USER 'luke2'@'%' IDENTIFIED BY '123456' FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 2;
    

    聊聊Mysql8.0中新增的密码策略-12
    我们尝试错误登录5次之后:
    聊聊Mysql8.0中新增的密码策略-13

    当然我们也可以修改策略:

    ALTER USER 'luke2'@'%' FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 2;
    

    也可以通过以下命令主动锁定某个用户:

    ALTER USER 'luke'@'%' ACCOUNT LOCK;
    

    聊聊Mysql8.0中新增的密码策略-14

    这样,luke用户就登陆不了了。

    聊聊Mysql8.0中新增的密码策略-15

    当解锁后:

    ALTER USER 'luke'@'%' ACCOUNT UNLOCK;
    

    聊聊Mysql8.0中新增的密码策略-16

    则又可以登录了

    聊聊Mysql8.0中新增的密码策略-17
    密码策略的最佳实践

    定期更新密码

    • 用户应该定期更新密码,通常建议每 90 天至 180 天更新一次。
    • 定期更换密码可以降低密码泄露的风险,也就是他拿前朝的刀斩不了今朝的臣。

    使用强密码生成工具

    • 强密码生成工具可以生成具有高强度的随机密码,包括足够长度的字符组合。
    • 使用密码管理器来生成和存储密码是一个好习惯,可以确保密码的复杂性和唯一性。

    多因素认证结合

    • 多因素认证结合密码策略可以提高用户身份验证的安全性。
    • 多因素认证通常结合了至少两种不同的身份验证因素,如密码、智能卡、生物识别特征等。

    密码长度和复杂度要求

    • 密码长度应该足够长,一般建议至少12个字符。
    • 密码应该包含不同类型的字符,包括大写字母、小写字母、数字和特殊字符。

    密码历史和重用限制

    • 禁止用户在一定时间内重复使用过去的密码,以确保密码的唯一性和安全性。

    密码锁定机制

    • 设置密码尝试次数的阈值,当用户连续多次使用错误的密码尝试登录时,自动锁定用户账户一段时间。
    • 锁定用户账户可以防止暴力破解攻击。

    密码教育和培训

    • 对用户进行密码安全意识教育和培训,教导他们如何创建安全密码、如何安全地存储和管理密码等。
    • 提供定期的安全意识培训,以确保用户了解最新的密码安全最佳实践和安全威胁。

    总结

    时代在进步,MySQL 8.0升级后的密码策略通过设定密码复杂度、历史限制和锁定机制等,提升了数据库安全性,防止了未经授权的访问,减少了内部威胁,符合合规性要求,促进用户安全意识,从而保护生产数据的完整性和保密性。

    生产上更安全了,加班可能也就少了吧。

    相关文章

    Oracle如何使用授予和撤销权限的语法和示例
    Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
    下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
    社区版oceanbase安装
    Oracle 导出CSV工具-sqluldr2
    ETL数据集成丨快速将MySQL数据迁移至Doris数据库

    发布评论