8.4.3 The Password Validation Component (original) (raw)

8.4.3 The Password Validation Component

The validate_password component serves to improve security by requiring account passwords and enabling strength testing of potential passwords. This component exposes system variables that enable you to configure password policy, and status variables for component monitoring.

The validate_password component implements these capabilities:

Note

For statements that assign or modify account passwords (ALTER USER,CREATE USER, andSET PASSWORD), thevalidate_password capabilities described here apply only to accounts that use an authentication plugin that stores credentials internally to MySQL. For accounts that use plugins that perform authentication against a credentials system external to MySQL, password management must be handled externally against that system as well. For more information about internal credentials storage, seeSection 8.2.15, “Password Management”.

The preceding restriction does not apply to use of theVALIDATE_PASSWORD_STRENGTH() function because it does not affect accounts directly.

Examples:

mysql> ALTER USER USER() IDENTIFIED BY 'abc';  
ERROR 1819 (HY000): Your password does not satisfy the current  
policy requirements  
mysql> ALTER USER 'jeffrey'@'localhost'  
       IDENTIFIED WITH mysql_native_password  
       AS '*0D3CED9BEC10A777AEC23CCC353A8C08A633045E';  
Query OK, 0 rows affected (0.01 sec)  
mysql> CREATE USER 'juanita'@'localhost' ACCOUNT LOCK;  
ERROR 1819 (HY000): Your password does not satisfy the current  
policy requirements  
mysql> SELECT VALIDATE_PASSWORD_STRENGTH('weak');  
+------------------------------------+  
| VALIDATE_PASSWORD_STRENGTH('weak') |  
+------------------------------------+  
|                                 25 |  
+------------------------------------+  
mysql> SELECT VALIDATE_PASSWORD_STRENGTH('lessweak$_@123');  
+----------------------------------------------+  
| VALIDATE_PASSWORD_STRENGTH('lessweak$_@123') |  
+----------------------------------------------+  
|                                           50 |  
+----------------------------------------------+  
mysql> SELECT VALIDATE_PASSWORD_STRENGTH('N0Tweak$_@123!');  
+----------------------------------------------+  
| VALIDATE_PASSWORD_STRENGTH('N0Tweak$_@123!') |  
+----------------------------------------------+  
|                                          100 |  
+----------------------------------------------+  

To configure password checking, modify the system variables having names of the formvalidate_password._`xxx`_; these are the parameters that control password policy. SeeSection 8.4.3.2, “Password Validation Options and Variables”.

If validate_password is not installed, thevalidate_password._`xxx`_ system variables are not available, passwords in statements are not checked, and theVALIDATE_PASSWORD_STRENGTH() function always returns 0. For example, without the plugin installed, accounts can be assigned passwords shorter than 8 characters, or no password at all.

Assuming that validate_password is installed, it implements three levels of password checking:LOW, MEDIUM, andSTRONG. The default isMEDIUM; to change this, modify the value ofvalidate_password.policy. The policies implement increasingly strict password tests. The following descriptions refer to default parameter values, which can be modified by changing the appropriate system variables.

In addition, validate_password supports the capability of rejecting passwords that match the user name part of the effective user account for the current session, either forward or in reverse. To provide control over this capability,validate_password exposes avalidate_password.check_user_name system variable, which is enabled by default.