目录

密码验证插件API

从10.1.2开始的MariaDB

从10.1.2开始,MariaDB实现了密码验证插件API

内容

  1. SQL级扩展
    1. 密码更改声明
      1. 使用纯文本密码
      2. 使用密码哈希
      3. 直接更新
  2. 例子
  3. 插件API

“密码验证”是指确保用户密码满足某些最低安全要求。专用的插件API允许创建密码验证插件,该插件将在设置用户密码(在SET PASSWORDGRANT语句中)时检查用户密码,并允许或拒绝用户密码。

SQL级扩展

MariaDB的带有两个密码验证插件-在simple_password_check插件和cracklib_password_check插件。默认情况下未启用它们。使用INSTALL SONAME(或INSTALL PLUGIN)语句安装它们。

加载至少一个密码插件后,如果密码未通过验证检查,则将验证所有新密码,并且更改密码的语句将失败。可以同时加载多个密码验证插件-在这种情况下,密码必须通过所有插件的所有验证检查。

密码更改声明

可以使用各种SQL语句来更改用户密码:

使用纯文本密码

SET  PASSWORD  = 密码(“纯文本密码” );
SET  PASSWORD  FOR  `用户``@主机`  =  PASSWORD ('明文口令' ); 
SET  PASSWORD  =  OLD_PASSWORD (“纯文本密码” );
SET  PASSWORD  FOR  `用户``@主机`  =  OLD_PASSWORD ('明文口令' ); 
创建 用户 `用户`@`主机`  由 “纯文本密码”标识;
GRANT 权限 TO  `用户`@`主机`  IDENTIFIED  BY  '明文密码' ;

这些语句需要密码验证。如果至少加载了一个密码验证插件,则将验证这些语句中指定的纯文本密码。

使用密码哈希

SET  PASSWORD  =  '密码哈希' ; 
SET  PASSWORD  FOR  `用户`@`主机`  =  '密码哈希' ; 
CREATE  USER  `用户`@`主机`  IDENTIFIED  BY  PASSWORD  '密码哈希' ; 
CREATE  USER  `用户`@`主机` 查明的 VIA  mysql_native_password 使用 '密码哈希' ; 
创建 用户 `用户`@`主机` 查明的 VIA  mysql_old_password 使用 “密码哈希” ; 
GRANT 权限 TO  `用户`@`主机`  IDENTIFIED  BY  PASSWORD  '密码哈希' ; 
GRANT 权限 TO  `用户`@`主机` 查明的 VIA  mysql_native_password 使用 '密码哈希' ; 
GRANT 权限 TO  `用户`@`主机` 查明的 VIA  mysql_old_password 使用 '密码哈希' ;

这些语句可能无法使用密码验证-没有要验证的内容,原始的纯文本密码不可用。MariaDB引入了严格的密码验证模式-由strict_password_validation全局服务器变量控制。如果启用了严格的密码验证,并且至少加载了一个密码验证插件,则这些“无效”密码将被拒绝。否则将被接受。默认情况下,启用了严格的密码验证(但是请注意,如果未加载密码验证插件,则它无效)。

直接更新

更新 mysql 。用户 SET 口令= “密码散列”  WHERE 用户= “用户”  AND 主机= “主机” ; 
冲洗 特权;

特权表的直接更新也未得到验证。但是与专用密码更改语句不同,直接更新不受该strict_password_validation变量影响。不要给不受信任的用户写访问mysql数据库的权限,否则他们将能够绕过密码验证(坦率地说,他们将能够做更多的事情,因此,如果不受信任的用户可以写特权表,则密码验​​证可能是最少的问题)。

例子

密码验证失败:

将*。*授予foobar的GRANT SELECT ON标识为'raboof';
错误HY000:您的密码不符合当前的政策要求

显示警告;
+ --------- + ------ + -------------------------------- -------------------------------- +
| 级别| 代码 留言|
+ --------- + ------ + -------------------------------- -------------------------------- +
| 警告| 1819 | cracklib:它基于您的用户名|
| 错误 1819 | 您的密码不符合当前的政策要求|
+ --------- + ------ + -------------------------------- -------------------------------- +

严格的密码验证:

GRANT SELECT ON *。*至foo由密码'2222222222222222'标识;
错误HY000:MariaDB服务器正在使用--strict-password-validation选项运行,因此它无法执行此语句

插件API

密码验证插件API非常简单。插件只能实现一种方法— validate_password()。此方法采用两个参数-用户名和纯文本密码。密码通过验证后返回0,否则返回1,

又见mysql/plugin_password_validation.h和密码验证插件plugin/simple_password_check/plugins/cracklib_password_check/

参考链接:https://mariadb.com/kb/en/password-validation/