作者:杨涛涛

资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


引言

这里来介绍下MySQL 8.0 版本自带的新密码验证策略。

正文

我们非常熟悉这样的模式: 用户想更改自己密码,需要提供原来密码或者追加手机验证码才可以, 这种模式在MySQL数据库里一直不存在。在MySQL 8.0 之前的版本,普通用户可以直接更改自己密码,不需要旧密码验证,也不需要知会管理员,比如用户ytt_admin 需要更改密码,在MySQL 5.7 下直接敲alter user 命令即可:

root@ytt-ubuntu:~# mysql -uytt_admin -proot1234 -P5734 -h ytt-ubuntu -e "alter user ytt_admin identified by 'root'"
mysql: [Warning] Using a password on the command line interface can be insecure.
这样的密码更改行为其实不是很安全,假设有下面的场景出现:
用户ytt_admin 登录到MySQL服务后,做了些日常操作,完成后忘记退出;此时刚好有一个别有用心的用户ytt_fake 进入ytt_admin的登录环境,直接敲命令alter user 即可更改用户ytt_admin的密码,并且退出当前登录环境,用户ytt_admin本尊再次登录MySQL,就会提示密码错误,不允许登录,此时用户ytt_admin大脑肯定是懵的。
为了防止这类不安全事件的发生,MySQL 8.0 发布了一系列密码验证策略。 这里介绍第一项:当前密码验证策略设置!
当前密码验证策略有两种方法来给到具体用户。
第一种,从管理员侧来设置单个用户的当前密码验证策略。

创建用户或者更改用户设置时使用子句: password require current(表示强制此用户满足当前密码验证策略) 。

mysql:(none)>create user ytt_admin identified by 'root123' password require current;
Query OK, 0 rows affected (0.11 sec)

之后以用户ytt_admin 登录MySQL并且更改密码,提示需要提供旧密码才行。

root@ytt-ubuntu:/home/ytt# mysql -h ytt-ubuntu -uytt_admin -proot123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 33
Server version: 8.0.27 MySQL Community Server - GPLmysql:(none)>alter user ytt_admin identified by 'root';
ERROR 3892 (HY000): Current password needs to be specified in the REPLACE clause in order to change it.

接下来,alter user 跟上子句replace 来让用户ytt_admin输入旧密码,成功更改新密码。

mysql:(none)>alter user ytt_admin identified by 'root' replace 'root123';
Query OK, 0 rows affected (0.00 sec)

如果有的场景下需要保持MySQL旧版本的密码更改行为,管理员侧可以用子句: password require current optional 关闭新特性。

-- (optional 关键词可用default 替代,参考全局密码验证参数设置)
mysql:(none)>alter user ytt_admin password require current optional;
Query OK, 0 rows affected (0.04 sec)

来再次验证下用户ytt_admin更改密码的行为:又变更为不安全的MySQL旧版本安全行为。

mysql:(none)>alter user ytt_admin identified by 'root';
Query OK, 0 rows affected (0.01 sec)
第二种,设置全局参数,来强制所有用户使用当前密码验证策略。

MySQL 8.0 新版本内置的参数password_require_current 定义一个全局密码策略,默认关闭。开启这个选项时,要求用户更改密码时必须提供旧密码。

开启全局参数:

mysql:(none)>set persist password_require_current=on;
Query OK, 0 rows affected (0.00 sec)

创建另外一个新用户 ytt_usage:

mysql:(none)>create user ytt_usage identified by 'root123';
Query OK, 0 rows affected (0.00 sec)

以用户ytt_usage登录MySQL更改自己密码: 直接拒绝更改,需要提供旧密码。

root@ytt-ubuntu:~# mysql -uytt_usage -proot123 -h ytt-ubuntu
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 8.0.27 MySQL Community Server - GPL...mysql:(none)>alter user ytt_usage identified by 'root';
ERROR 3892 (HY000): Current password needs to be specified in the REPLACE clause in order to change it.
mysql:(none)>

replace 子句提供旧密码再次成功更改新密码:

mysql:(none)>alter user ytt_usage identified by 'root' replace 'root123';
Query OK, 0 rows affected (0.02 sec)

这里有一个需要注意的点:虽然全局参数开启,但是alter user 命令优先级更高,可以直接覆盖全局参数设置。下面是全局参数开启的环境下,用alter user命令来关闭用户ytt_usage的当前密码验证策略。

mysql:(none)>alter user ytt_usage password require current optional;
Query OK, 0 rows affected (0.11 sec)

接下来用户ytt_usage 又恢复为MySQL旧版本的安全行为:

mysql:(none)>alter user ytt_usage identified by 'rootnew';
Query OK, 0 rows affected (0.11 sec)

还有另外一个子句: password require current default ,具体行为由全局参数password_require_current 的设置决定,全局参数关闭,这个子句恢复MySQL旧版本安全行为;全局参数开启,这个子句使用MySQL 新版本安全行为。

mysql:(none)>alter user ytt_usage password require current default;
Query OK, 0 rows affected (0.09 sec)

总结:

本文介绍的当前密码验证策略,使得MySQL 朝着更加安全的方向努力。

新特性解读 | MySQL 8.0 新密码策略(上)相关推荐

  1. c语言 字符串 正序再倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引

    原创作者:杨涛涛 我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引. MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉. 比如对于以下的查询,无法发挥索引 ...

  2. 中累计直方图_新特性解读 | MySQL 8.0 直方图

    原创作者:杨涛涛 MySQL 8.0 推出了histogram,也叫柱状图或者直方图.先来解释下什么叫直方图. 关于直方图 我们知道,在DB中,优化器负责将SQL转换为很多个不同的执行计划,完了从中选 ...

  3. 新特性解读 | MySQL 8.0 对 limit 的优化

    作者:杨奇龙 网名"北在南方",资深 DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优.故障诊断. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不 ...

  4. 新特性解读 | MySQL 8.0 对 GTID 的限制解除

    作者:杨涛涛 资深数据库专家,专研 MySQL 十余年.擅长 MySQL.PostgreSQL.MongoDB 等开源数据库相关的备份恢复.SQL 调优.监控运维.高可用架构设计等.目前任职于爱可生, ...

  5. mysql8导入 psc 没有数据_新特性解读 | MySQL 8.0.22 任意格式数据导入

    作者:杨涛涛 资深数据库专家,专研 MySQL 十余年.擅长 MySQL.PostgreSQL.MongoDB 等开源数据库相关的备份恢复.SQL 调优.监控运维.高可用架构设计等.目前任职于爱可生, ...

  6. mysql 8函数索引_新特性解读 | MySQL 8.0 索引特性1-函数索引

    原创作者:杨涛涛 函数索引顾名思义就是加给字段加了函数的索引,这里的函数也可以是表达式.所以也叫表达式索引. MySQL 5.7 推出了虚拟列的功能,MySQL8.0的函数索引内部其实也是依据虚拟列来 ...

  7. mysql force index报错_新特性解读 | MySQL 8.0 索引特性4-不可见索引

    MySQL 8.0 实现了索引的隐藏属性.当然这个特性很多商业数据库早就有了,比如ORACLE,在11g中就实现了.我来介绍下这个小特性. 介绍 INVISIBLE INDEX,不可见索引或者叫隐藏索 ...

  8. mysql applier_新特性解读 | MySQL 8.0.18 有权限控制的复制

    背景 MySQL 8.0.18 以前,从服务器都是在不检查权限的情况下执行复制事务的,这样做是为了能够让主服务器获取所有内容.实际上,这意味着从机完全信任主机.但是,可能存在一些设置,其中更改跨越了主 ...

  9. concat 不是可以识别的 内置函数名称。_新特性解读 | MySQL 8.0 窗口函数详解

    背景 一直以来,MySQL 只有针对聚合函数的汇总类功能,比如MAX, AVG 等,没有从 SQL 层针对聚合类每组展开处理的功能.不过 MySQL 开放了 UDF 接口,可以用 C 来自己写UDF, ...

最新文章

  1. tomcat的webapps下没有出现配置过的文件夹
  2. Android输入输出机制之来龙去脉之前生后世
  3. ddd架构 无法重构_漫谈分层架构:为什么要进行架构分层?
  4. 《微软文档管理解决方案2007》之一:安装部署 - [SharePoint Server]
  5. openCV中waitKey函数介绍
  6. JVM源码---教你傻瓜式编译openjdk7(JAVA虚拟机爱好者必看)
  7. 转:Oracle物理文件
  8. linux下图片加密原理,Linux中常见的加密技术介绍
  9. 安装了linux后win10键盘失灵,win10系统安装后笔记本键盘失灵不能用的解决方法
  10. HTML简单动画制作
  11. word中统一修改mathtype公式和大小对应
  12. matlab中的箭头符号怎么打开,MATLAB中上下标、斜体、箭头等符号的使用方法
  13. 编码方法论:设计数据结构
  14. 程序员都是这样关机的
  15. Github上找好东西的方法
  16. Python自动化办公:读取pdf文档
  17. 【选址问题】二进制灰狼算法解决无容量选址问题【Matlab】
  18. 利用Debug Api 获得QQ密码
  19. 椭圆切线方程公式的推导过程
  20. c#修改程序名称——转载

热门文章

  1. EZ娱乐带手机版(足球+彩票)
  2. 如何利用计算机系统进行辅助决策,基于IDSS的计算机辅助定密系统研究
  3. 数据交换中心的方案设计
  4. 6个超实用黑科技工具,电脑端、移动端都有份,强烈建议收藏
  5. 射频指纹识别(RF指纹识别)
  6. (经典Flash游戏)Zoom Keeper
  7. MySQL表相关操作
  8. java-net-php-python-jsp桂林母婴用品二手交易网计算机毕业设计程序
  9. 陕西省三本计算机专业排名,陕西三本大学排名完整版
  10. python concat ValueError: Shape of passed values is indices imply