Настройка проверки сложности паролей в MySQL

Содержание

Введение

Для проверки сложности паролей пользователей MySQL предназначен плагин validate_password, который поставляется в пакете с сервером MySQL:

# dpkg -L percona-server-server-5.7 | grep validate_password
/usr/lib/mysql/plugin/debug/validate_password.so
/usr/lib/mysql/plugin/validate_password.so

Проверка сложности пароля происходит при его изменении командами ALTER USER, CREATE USER и SET PASSWORD, а также проверяются пароли, переданные в функцию PASSWORD().

Если нужно проверить сложность пароля в других случаях, то для этого можно воспользоваться функцией VALIDATE_PASSWORD_STRENGTH(), которая возвращает оценку сложности пароля по шкале от 0 до 100.

Плагин поддерживает три уровня сложности паролей:

  • LOW - проверяется только длина пароля, пароли должны иметь длину минимум 8 символов,
  • MEDIUM - также проверятеся, что пароль содержит хотя бы один цифровой символ, один символ в нижнем регистре и один специальный символ,
  • STRONG - дополнительно проверяется, чтобы последовательности из 4 и более символов не встречаются в словаре, если словарь был указан.

Используемый уровень сложности задаётся с помощью переменной validate_password_policy и по умолчанию имеет значение MEDIUM.

Кроме этого плагин позволяет проверять, не совпадает ли часть пароля с именем или идентификатором текущего пользователя. Эту функцию можно включить с помощью переменной validate_password_check_user_name.

Настройка плагина

Для включения плагина впишем его настройки в файл /etc/mysql/percona-server.conf.d/mysqld.cnf:

plugin_load_add = validate_password.so
validate_password = FORCE_PLUS_PERMANENT
validate_password_policy = LOW
validate_password_check_user_name = ON

И перезапустим сервер MySQL:

# systemctl restart mysql

Проверка работы плагина

Проверить, включен ли плагин, можно с помощью запроса:

SELECT plugin_name, plugin_status
FROM information_schema.plugins
WHERE plugin_name = 'validate_password';

Если плагин включен, запрос вернёт следующий результат:

+-------------------+---------------+
| plugin_name       | plugin_status |
+-------------------+---------------+
| validate_password | ACTIVE        |
+-------------------+---------------+

Проверить, работает ли плагин, можно, например, попытавшись создать пользователя с простым паролем:

mysql> CREATE USER test@localhost IDENTIFIED BY 'test';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

Проблемы с pt-show-grants

В выводе утилиты pt-show-grants для создания пользователя с нужными свойствами выводятся две команды:

  • сначала с помощью команды CREATE USER IF NOT EXISTS создаётся пользователь без пароля,
  • затем у созданного пользователя с помощью команды ALTER USER выставляется пароль и другие свойства.

Восстановить пользователей, воспользовавшись файлом с сохранённым выводом команды pt-show-grants, при включенном плагине validate_password не получится, т.к. плагин не позволяет создать пользователя без пароля.

Для решения этой проблемы можно прибегнуть к скрипту следующего вида:

#!/bin/sh

pt-show-grants $@ \
        | awk '/^CREATE USER IF NOT EXISTS/ {
                        u = $6;
                }

               /^ALTER USER/ {
                        if (u == $3 ";") {
                                a = $0;
                                gsub("ALTER USER ", "CREATE USER IF NOT EXISTS ", $0);
                                print $0;
                                print a;
                        }
                }

                !/^CREATE USER IF NOT EXISTS|ALTER USER/ {
                        u = "";
                        print $0;
                }'

В этом скрипте пароль и другие свойства пользователя из команды ALTER TABLE добавляются также к команде CREATE USER IF NOT EXISTS так, что если пользователь не существует, он сразу создаётся с нужным паролем и свойствами. Но затем пароль и свойства пользователя всё равно меняются с помощи команды ALTER USER на случай, если этот пользователь уже существовал до команды CREATE USER IF NOT EXISTS.

Использованные материалы