ct检测原理图_输入密码不满足密码策略要求

ct检测原理图_输入密码不满足密码策略要求作者:Sri Sakthivel 原文链接:https://www.percona.com/blog/enhanced-password-management-systems-in-mysql-8-p

译文 | MySQL 8.0 密码管理策略(一)

作者:Sri Sakthivel

原文链接:https://www.percona.com/blog/enhanced-password-management-systems-in-mysql-8-part-1

MySQL 8.0 在密码管理方面有很多改善,本文将介绍以下两个特性。

  • 密码重用策略
  • 生成随机密码

| 1 密码重用策略

该策略简单说,就是设置新密码时,可以限制禁止使用曾经用过的密码。有以下两种策略:

  • 历史密码 password_history
  • 间隔时间 password_reuse_interval

1.1 历史密码

MySQL 官方手册描述:

If an account is restricted on the basis of number of password changes, a new password cannot be chosen from a specified number of the most recent passwords.

在实验环境中,创建用户并添加条件password history 2,历史密码中最近的两个不能被重新使用。

mysql> create user "herc"@"localhost" identified by "Percona@321" password history 2;
Query OK, 0 rows affected (0.02 sec)

mysql> select user, host, password_reuse_history from mysql.user where user="herc"G
*************************** 1. row ***************************
                  user: herc
                  host: localhost
password_reuse_history: 2
1 row in set (0.00 sec)

MySQL 将在 mysql.password_history 表上记录密码更改的信息。

mysql> select * from mysql.password_history;
+-----------+------+----------------------------+------------------------------------------------------------------------+
| Host      | User | Password_timestamp         | Password                                                               |
+-----------+------+----------------------------+------------------------------------------------------------------------+
| localhost | herc | 2021-09-20 15:44:42.295778 | $A$005$=R:q"M(Kh#D];c~SdCLyluq2UVHFobjWOFTwn2JYVFDyI042sl56B7DCPSK5 |
+-----------+------+----------------------------+------------------------------------------------------------------------+
1 row in set (0.00 sec)

接下来我们尝试更改用户 herc@localhost 的密码。

mysql> alter user "herc"@"localhost" identified by "MySQL@321";
Query OK, 0 rows affected (0.02 sec)

mysql> select * from mysql.password_historyG
*************************** 1. row ***************************
              Host: localhost
              User: herc
Password_timestamp: 2021-09-20 15:49:15.459018
CGeRQT31UUwtw194KOKGdNbgj3558VUB.dxcoS8r4IKpG8
*************************** 2. row ***************************
              Host: localhost
              User: herc
Password_timestamp: 2021-09-20 15:44:42.295778
          Password: $A$005$=R:q"M(Kh#D];c~SdCLyluq2UVHFobjWOFTwn2JYVFDyI042sl56B7DCPSK5
2 rows in set (0.00 sec)

更改成功后,查看 mysql.password_history 表,可见该表存有最近两个密码的信息。

再次更改该用户密码,且密码为创建用户时设置的密码值(Percona@321)。

mysql> alter user "herc"@"localhost" identified by "Percona@321";
ERROR 3638 (HY000): Cannot use these credentials for "herc@localhost" because they contradict the password history policy

修改失败! 因为根据我们设置的限制策略,不能重用在 mysql.password_policy 表中被记录的最近的两个密码。因此,如果想再次重复使用第一个密码,就不能让该密码出现在 mysql.password_policy 表中。

再设置一个新密码后(第一个密码已经不是最近的两个密码了),再尝试用第一个密码值(Percona@321)进行修改,修改成功!

mysql> alter user "herc"@"localhost" identified by "Herc@321";
Query OK, 0 rows affected (0.01 sec)

mysql> alter user "herc"@"localhost" identified by "Percona@321";
Query OK, 0 rows affected (0.02 sec)

也可以在启动时在全局配置 password_history

#vi my.cnf
[mysqld]
password_history=6

#set global
mysql> set global password_history=5;
Query OK, 0 rows affected (0.00 sec)

1.2 间隔时间

MySQL 官方手册描述:

If an account is restricted based on time elapsed, a new password cannot be chosen from passwords in the history that are newer than a specified number of days.

测试前,创建了用户 sri@localhost,并设置用户密码可重用的时间间隔为五天。

mysql> create user "sri"@"localhost" identified by "Percona@321" password reuse interval 5 day;
Query OK, 0 rows affected (0.01 sec)

mysql> select user, host, password_reuse_time from mysql.user where user="sri"G
*************************** 1. row ***************************
               user: sri
               host: localhost
password_reuse_time: 5
1 row in set (0.00 sec)

这意味着每个密码生效后,在五天内都不能再被重复设置。

mysql> select * from mysql.password_history where user="sri"G
*************************** 1. row ***************************
              Host: localhost
              User: sri
Password_timestamp: 2021-09-20 16:09:27.918585
          Password: $A$005$+B   e3!C9&8m
                                         eFRG~IqRWX4b6PtzLA8I4VsdYvWU3qRs/nip/QRhXXR5phT6
1 row in set (0.00 sec)

执行 ALTER 来更改密码。

mysql> alter user "sri"@"localhost" identified by "Herc@321";
Query OK, 0 rows affected (0.02 sec)

mysql> select * from mysql.password_history where user="sri"G
*************************** 1. row ***************************
              Host: localhost
              User: sri
Password_timestamp: 2021-09-20 16:17:51.840483
          Password: $A$005$~k7qp8.OP=^#e79qwtiYd7/cmCFLvHM7MHFbvfX2WlhXqzjmrN03gGZ4
*************************** 2. row ***************************
              Host: localhost
              User: sri
Password_timestamp: 2021-09-20 16:09:27.918585
          Password: $A$005$+B   e3!C9&8m
                                         eFRG~IqRWX4b6PtzLA8I4VsdYvWU3qRs/nip/QRhXXR5phT6
2 rows in set (0.00 sec)

现在尝试再次设置为第一个密码。

mysql> alter user "sri"@"localhost" identified by "Percona@321";
ERROR 3638 (HY000): Cannot use these credentials for "sri@localhost" because they contradict the password history policy

设置失败!

也可以在启动时在全局配置 password_reuse_interval

#vi my.cnf
[mysqld]
password_reuse_interval=365

#set global
mysql> set global password_reuse_interval=365;
Query OK, 0 rows affected (0.00 sec)

| 2 随机密码

从 MySQL 8.0.18 开始,MySQL 能够为用户帐户创建随机密码。这意味着可以不必分配指定密码。它支持以下语句:

  • 创建用户
  • 更改用户
  • 设置密码

我们需要使用 RANDOM PASSWORD 以避免修改密码时屏幕上有明文显示。例如:

mysql> create user "sakthi"@"localhost" identified by random password;
+--------+-----------+----------------------+
| user   | host      | generated password   |
+--------+-----------+----------------------+
| sakthi | localhost | .vZYy+<<BO7l1;vtIufH |
+--------+-----------+----------------------+
1 row in set (0.01 sec)

mysql> alter user "sri"@"localhost" identified by random password;
+------+-----------+----------------------+
| user | host      | generated password   |
+------+-----------+----------------------+
| sri  | localhost | 5wb>2[]q*jbDsFvlN-i_ |
+------+-----------+----------------------+
1 row in set (0.02 sec)

密码哈希值将存储在 mysql.user 表中。

mysql> select user, authentication_string from mysql.user where user in ("sakthi","sri")G
*************************** 1. row ***************************
                 user: sakthi
authentication_string: $A$005$L`PYcedj%3tz*J>ioBP1.Rsrj7H8wtelqijvV0CFnXVnWLNIc/RZL0C06l4oA
*************************** 2. row ***************************
                 user: sri
authentication_string: $A$005$/k?aO&ap.#b=
                                          ^zt[E|x9q3w9uHn1oEumXUgnqNMH8xWo4xd/s26hTPKs1AbC2
2 rows in set (0.00 sec)

默认情况下,密码长度为 20 个字符。我们可以使用变量 generated_random_password_length 定义密码长度,允许的长度范围是 5 到 255。

mysql> select @@generated_random_password_length;
+------------------------------------+
| @@generated_random_password_length |
+------------------------------------+
|                                 20 |
+------------------------------------+
1 row in set (0.00 sec)

如果 validate_password 组件已经安装,对随机密码策略不会有影响。

还有一些特性,将在下一篇文章中介绍。

参考

MySQL 手册:

  • https://dev.mysql.com/doc/mysql-security-excerpt/8.0/en/password-management.html

  • https://dev.mysql.com/doc/refman/8.0/en/password-management.html#random-password-generation

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5818.html

(0)
上一篇 2023-04-23
下一篇 2023-04-23

相关推荐

  • 数据库发展史(下)

    数据库发展史(下)本篇文章为大家讲解AI原生数据库和其他类型数据库的发展历程。 AI原生数据库 近年来,随着AI(人工智能)技术的成熟和发展,AI与数据库的结合越来越紧密。为了提高数据库系统的智能化程度,使数据库系统…

    2023-04-12
    110
  • Python中的字母操作

    Python中的字母操作Python是一种广泛使用的编程语言。在实际项目中,经常需要处理文本数据,而文本数据中最常见的就是字母。Python提供了丰富的字母操作函数,方便开发者对文本数据进行处理和操作。本文将介绍Python中常用的字母操作,包括大小写转换、排序等。

    2024-04-05
    22
  • 混沌算法原理_混沌工程

    混沌算法原理_混沌工程本篇文章整理自我司研发工程师杨可奥以及 PingCAP 工程效率负责人、Chaos Mesh 负责人周强在 GoCN 开源说上的演讲实录。 本文首先介绍了对混沌工程这一概念的描述,分享了混沌工程的动…

    2023-04-13
    100
  • Python的时间处理模块:让时间操作更便捷

    Python的时间处理模块:让时间操作更便捷在Python中,时间可以表示为字符串、元组或日期对象。其中,最常用的时间格式是字符串格式,例如:

    2024-02-02
    54
  • python插入排序3(快速排序 python3)

    python插入排序3(快速排序 python3)class SortMethod:

    2023-10-25
    76
  • 数据库管理与高可用—-第二章数据库管理

    数据库管理与高可用—-第二章数据库管理数据库管理与高可用—-第二章数据库管理一:数据库基本操作命令◆DDL语句创建库,表的命令创建数据库:createdatabase数据库名创建数据表:createtable表名(字段定义…)cre…

    2023-04-05
    107
  • Python检查库版本的方法

    Python检查库版本的方法在python中,我们经常需要使用各种各样的库或者第三方模块来实现自己的功能。而这些库的版本是不断更新的,为了避免出现一些不必要的错误或者是兼容性问题,我们需要对这些库的版本进行检查。br
    本文将从多个方面详细阐述Python检查库版本的方法。

    2024-05-04
    8
  • Mysql工作日志「终于解决」

    Mysql工作日志「终于解决」1. DISTINCT效率极差,可以选择替换groupby,最好能在代码内部去重 2. filesort效率也很低 3. 能使用连接查询尽量不要使用子查询 4. in查询包含内容很多的情况下,不要通…

    2023-03-22
    102

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注