前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 8.0新特性 — 密码管理

MySQL 8.0新特性 — 密码管理

原创
作者头像
brightdeng@DBA
修改2020-09-17 15:15:12
1.7K0
修改2020-09-17 15:15:12
举报

前言

作为世界上最流行的开源数据库,MySQL各方面的功能都在不断完善,比如密码管理这一块,从一开始最简单的用户名密码、到5.7版本的validate_password插件、再到8.0版本丰富多彩的密码策略,已经完全可以媲美DB2、Oracle、SQL Server等大型商业数据库;今天就给大家带来 MySQL 8.0新特性 — 密码管理。

密码管理

在MySQL 8.0版本中,针对密码管理这一块,做出了非常大的改进与完善,支持以下功能:

(1)密码认证插件

(2)密码过期策略

(3)密码复用策略

(4)密码修改验证策略

(5)双重密码支持

(6)密码强度策略

(7)随机密码生成

(8)登录失败追踪

密码认证插件

在MySQL 8.0版本中,支持以下3种密码认证插件:

(1)mysql_native_password:8.0之前默认

(2)caching_sha2_password:8.0默认

(3)sha256_password:可选

caching_sha2_password作为8.0默认的密码认证插件,其安全性强于mysql_native_password,性能优于sha256_password;但由于客户端和驱动的兼容性问题,建议还是采用mysql_native_password作为默认的密码认证插件。

如果采用caching_sha2_password作为默认的密码认证插件,那么在建立连接时,一定要指定RSA公钥,否则会报错“ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.”,具体如下:

(1)mysql/mysqlbinlog/mysqldump/mysqlpump等:通过--server-public-key-path="..."指定RSA公钥,或通过--get-server-public-key=1自动获取

(2)主从复制:通过MASTER_PUBLIC_KEY_PATH="..."指定RSA公钥,或通过GET_MASTER_PUBLIC_KEY=1自动获取

(3)组复制:通过group_replication_recovery_public_key_path="..."指定RSA公钥,或通过group_replication_recovery_get_public_key=1自动获取

关于RSA公钥和私钥,可以通过以下参数进行设置:

(1)caching_sha2_password_auto_generate_rsa_keys:是否自动生成RSA key

(2)caching_sha2_password_private_key_path:RSA private key所在的位置

(3)caching_sha2_password_public_key_path:RSA public key所在的位置

密码过期策略

密码过期策略,可以通过系统参数进行设置,对所有用户生效

代码语言:txt
复制
$ vi my.cnf
default_password_lifetime = 180        --默认的密码有效期为180天

也可以通过SQL语句,对指定用户进行设置

代码语言:txt
复制
mysql> alter user test@'%' password expire interval 90 day;        --密码有效期为90天
mysql> alter user test@'%' password expire never;        --密码永不过期
mysql> alter user test@'%' password expire default;        --采用默认的密码有效期

还可以手动指定某用户过期

代码语言:txt
复制
mysql> alter user test@'%' password expire;

密码复用策略

密码复用策略,可以通过系统参数进行设置,对所有用户生效

代码语言:txt
复制
$ vi my.cnf
password_history = 6        --密码多少次不复用
password_reuse_interval = 365        --密码多少天不复用

也可以通过SQL语句,对指定用户进行设置

代码语言:txt
复制
mysql> alter user test@'%' password history 6;        --密码6次不复用
mysql> alter user test@'%' password reuse interval 365 day;        --密码365天不复用
mysql> alter user test@'%' password history default reuse interval default;        --采用默认的密码复用策略

密码修改验证策略

密码修改前,需要指定旧密码,才能进行修改;这也是大大提高了安全性,大大降低了 客户端记住密码/临时离开工位 导致密码被别人篡改的风险。

可以通过系统参数进行设置,对所有用户生效

代码语言:txt
复制
$ vi my.cnf
password_require_current = on        --启用密码修改验证策略

也可以通过SQL语句,对指定用户进行设置

代码语言:txt
复制
mysql> alter user test@'%' password require current;        --启用密码修改验证策略
mysql> alter user test@'%' password require current optional;        --启用密码修改验证策略(非强制)
mysql> alter user test@'%' password require current default;        --启用默认的密码修改验证策略

启用密码修改验证策略后,修改密码需要提供旧密码和新密码

代码语言:txt
复制
mysql> alter user test@'%' identified by 'new_password' replace 'old_password';

双重密码支持

相信很多的开发、管理员和DBA都遇见过这样一个场景:修改完数据库用户密码,业务系统某个/某些模块立刻不可用,报密码错误;其实这种情况很常见,业务系统模块那么多,有时候会有遗漏不奇怪。双重密码,支持旧密码和新密码同时登录,就可以很好地规避这个问题,平滑地实现密码修改。

保留旧密码

代码语言:txt
复制
mysql> alter user test@'%' identified by 'new_password' retain current password;

废弃旧密码

代码语言:txt
复制
mysql> alter user test@'%' discard old password;

密码强度策略

在MySQL 5.7版本中,提供了validate_password的插件,实现密码强度策略;在MySQL 8.0版本中,官方是将validate_password改造成组件,并提供一系列系统参数,以实现密码强度策略。

首先,我们需要安装validate_password组件,通过以下SQL语句

代码语言:txt
复制
mysql> INSTALL COMPONENT 'file://component_validate_password';        --安装组件
mysql> UNINSTALL COMPONENT 'file://component_validate_password';        --卸载组件

然后,我们可以通过以下系统参数,进行密码强度策略设置:

(1)validate_password.policy

low:只验证密码的长度

medium:验证密码的长度、数字、大小写、特殊字符

strong:验证密码的长度、数字、大小写、特殊字符、字典文件

(2)validate_password.check_user_name:设置是否验证用户名和密码一样

(3)validate_password.length:设置密码长度要求

(4)validate_password.number_count:设置密码数字要求

(5)validate_password.mixed_case_count:设置密码大小写要求

(6)validate_password.special_char_count:设置密码特殊字符要求

(7)validate_password.dictionary_file:设置字典文件(可以将常见弱口令写入字典文件,用于过滤)

密码随机生成

在MySQL 8.0中,还支持随机密码生成

代码语言:txt
复制
mysql> alter user test@'%' identified by random password;

可以通过以下系统参数,对随机密码生成的长度进行控制

代码语言:txt
复制
generated_random_password_length = 20        --随机密码生成长度

登录失败追踪

最后,再来看一下登录失败的问题;我们可以设置连续登录失败多少次,账号会被锁定多少天,具体如下:

代码语言:txt
复制
mysql> alter user test@'%' failed_login_attempts 3 password_lock_time 3;        --失败3次,锁定3天

总结

在MySQL 8.0版本中,密码管理这一块功能日趋完善,大大提高了MySQL数据库的安全性,尤其对政务行业、金融行业等监管要求高的企业来说,更具有吸引力。所以,大家是不是又多了一个升级8.0的理由了呢?

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 密码管理
    • 密码认证插件
      • 密码过期策略
        • 密码复用策略
          • 密码修改验证策略
            • 双重密码支持
              • 密码强度策略
                • 密码随机生成
                  • 登录失败追踪
                  • 总结
                  相关产品与服务
                  云数据库 SQL Server
                  腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                  http://www.vxiaotou.com