MySQL OCP888题解007-validate_password_policy(密码验证策略)

1、原题

1.1、英文原题


An admin attemps to enforce stronger security by using the commands:
mysql> set global validate_password_policy=‘STRONG’;
mysql> set global validate_password_dictionary_file=‘/tmp/dictionary_file’;
mysql> show status like ‘validate_password%’;
±----------------------------------------------±--------------------+
| Variable_name | Value |
±----------------------------------------------±--------------------+
| validate_password_dictionary_file_last_parsed | 2018-03-07 13:25:06 |
| validate_password_dictionary_file_words_count | 10 |
±----------------------------------------------±--------------------+
The admin leaves the system running with the specified changes. What are two remaining security concerns?
A. validate_password_policy cannot be set without restarting MySQL instance.
B. The name of dictionary file is too obvious.
C. The dictionary file word list is too short.
D. validate_password_dictionary_file cannot be set without restarting the MySQL instance.
E. The validate_password plugin has not been loaded.
F, The dictionary file is an insecure location.

1.2、中文翻译

管理员尝试使用以下命令加强安全性:
mysql> set global validate_password_policy=‘STRONG’;
mysql> set global validate_password_dictionary_file=‘/tmp/dictionary_file’;
mysql> show status like ‘validate_password%’;
±----------------------------------------------±--------------------+
| Variable_name | Value |
±----------------------------------------------±--------------------+
| validate_password_dictionary_file_last_parsed | 2018-03-07 13:25:06 |
| validate_password_dictionary_file_words_count | 10 |
±----------------------------------------------±--------------------+
管理员使用指定的更改使系统保持运行。剩下的两个安全问题是什么?
A、 如果不重新启动MySQL实例,则无法设置validate_password_policy。
B、 字典文件的名称太明显。
C、 词典文件单词列表太短。
D、 如果不重新启动MySQL实例,则无法设置validate_password_dictionary_file。
E、 尚未加载validate_password插件。
F、 字典文件的位置不安全。

1.3、答案

C、F

2、题目解析

2.1、题干解析

本题考点为MySQL的密码校验策略。

2.2、选项解析

2.2.1、选项A解析

validate_password_policy变量是可以通过set global动态设置的,可以不重启MySQL实例,所以选项A错误。

2.2.2、选项C解析

当validate_password插件被安装,且validate_password_policy变量设置为2或STRONG后,就会使用字典文件做密码检查,即密码的每个子串(长度为4至100)都会与字典文件中的单词进行比较。这里的字典文件的词列表长度只有10,显然太短了。

2.2.3、选项D解析

validate_password_dictionary_file和validate_password_policy变量一样,是可以动态配置的。

2.2.4、选项E解析

如果validate_password插件未加载,则validate_password_policy变量和validate_password_dictionary_file变量根本无法设置,也不会有值,所以选项E错误。

2.2.5、选项F解析

validate_password_dictionary_file位于/tmp目录下,显然是不安全的,随时可能被覆盖或清除。所以选项F正确。

3、知识点

3.1、知识点1:密码验证策略

3.1.1、密码验证插件validate_password plugin

validate_password插件的作用是通过对账户密码做更高强度的测试来提高安全性,该插件启用后可以通过一组系统变量(
validate_password_xxx)配置密码策略。插件的主要功能包括:

  1. 检测ALTER USER、CREATE USER、GRANT和SET PASSWORD语句中可能存在的弱密码。
  2. 对于CREATE USER语句强制要求设置密码,并满足密码策略。
  3. validate_password实现了一个VALIDATE_PASSWORD_STRENGTH()SQL函数,用于评估潜在密码的强度。这个函数接受一个密码参数,并返回一个从0(弱)到100(强)的整数。

安装了validate_password插件后,可实现三个级别的密码检查:LOW, MEDIUM, 和 STRONG,依次越来越严格,默认是MEDIUM。可以通过修改validate_password_policy的值改变检查策略等级。

MySQL5.7默认是没有安装validate_password插件的,validate_password插件有两种安装方法:

  • 第一种方式(推荐):运行时注册插件。无需重启mysql
    命令执行:install plugin validate_password soname ‘validate_password.so’;
  • 第二种方式:
    my.cnf配置文件添加,之后需要重启mysql
[mysqld]
plugin-load=validate_password=validate_password.so

官方参考文档
安装参考方法

3.1.2、密码验证策略配置

3.1.2.1、validate_password_policy变量

validate_password_policy变量表示由validate_password强制执行的密码验证要求等级,是可以动态设置的。除非安装了validate_password,否则这个变量是不可用的。值可以使用数字值0、1、2,或者相应的符号值LOW、MEDIUM、STRONG来指定。对于本变量的说明如下所示:

官方参考文档

3.1.2.2、validate_password_dictionary_file变量

除非安装了validate_password,否则validate_password_dictionary_file变量是不可用的。默认情况下,这个变量的值为空,不进行字典检查。要进行字典检查,这个变量的值必须是不空的。如果文件被命名为相对路径,它将被解释为相对于服务器的数据目录。文件内容应该是小写的,每行一个字。内容被视为具有utf8的字符集。允许的最大文件大小为1MB。
要在密码检查过程中使用字典文件,密码策略必须设置为2(STRONG);密码的每个子串(长度为4至100)都会与字典文件中的单词进行比较。任何匹配都会导致密码被拒绝。比较是不分大小写的。
validate_password_dictionary_file可以在运行时动态设置,指定一个值会使命名的文件被读取,而不需要重新启动服务器。

官方参考文档

4、实验

4.1、实验1

4.1.1、实验目的

学习MySQL密码验证策略如何启用和设置。

4.1.2、实验前准备

一个已安装并运行的MySQL5.7实例。

4.1.3、实验步骤

参考文档

1、先查看已安装的插件,发现没有validate_password

mysql> show plugins;
+----------------------------+----------+--------------------+--------------------+---------+
| Name                       | Status   | Type               | Library            | License |
+----------------------------+----------+--------------------+--------------------+---------+
......
| rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |
| rpl_semi_sync_slave        | ACTIVE   | REPLICATION        | semisync_slave.so  | GPL     |
+----------------------------+----------+--------------------+--------------------+---------+

2、此时设置validate_password_policy和validate_password_dictionary_file变量都会报错。

3、接下来安装validate_password插件。首先查看插件目录:

mysql> show variables like "%plugin_dir%";
+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| plugin_dir    | /usr/local/mysql//lib/plugin/ |

4、然后到/usr/local/mysql//lib/plugin/目录下查看密码验证插件是否存在。

$ cd /usr/local/mysql//lib/plugin/
$ ls | grep validate_password
validate_password.so

5、在会话中安装插件:

mysql> install plugin validate_password soname 'validate_password.so';

6、这时候再查看,可以看到插件目录里有validate_password插件了:

mysql> show plugins;
+----------------------------+----------+--------------------+----------------------+---------+
| Name                       | Status   | Type               | Library              | License |
+----------------------------+----------+--------------------+----------------------+---------+
......
| rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so   | GPL     |
| rpl_semi_sync_slave        | ACTIVE   | REPLICATION        | semisync_slave.so    | GPL     |
| validate_password          | ACTIVE   | VALIDATE PASSWORD  | validate_password.so | GPL     |
+----------------------------+----------+--------------------+----------------------+---------+

7、如下设置validate_password*变量:

mysql> set global validate_password_policy='STRONG';
mysql> set global validate_password_dictionary_file='/tmp/dictionary_file';

4.1.4、实验结论

  • MySQL可以通过启用validate_password插件和配置validate_password相关变量以实现对密码验证策略的配置和加强,从而避免弱密码。
  • validate_password插件的启用有运行时注册插件(无需重启)和配置文件指定插件(需要重启)两种方式,只要validate_password插件被启用,就可以通过动态设置validate_password的一组系统变量来设置密码验证策略。

5、总结

同实验结论,略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值