Начал хоровод — танцуй его до конца (Болгарская пословица).

MySQL 8.0 и управление паролями пользователей

5 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
25 мая 2019
MySQL 8.0 и управление паролями пользователей
Давайте посмотрим на функции управления паролями, доступные в MySQL 8.0.

Мы рассмотрим управление паролями в MySQL в 5 разделах:

  • проверка
  • истечение
  • политика повторного использования
  • политика проверки
  • двойные активные пароли

 

Проверка

Проверка пароля означает, что новый пароль должен соответствовать некоторой политике, чтобы убедиться, что пароль не является слабым. Эта работа выполняется компонентом в MySQL 8.0: validate_password.

Чтобы иметь возможность использовать этот компонент, вам необходимо установить его. Вы можете проверить, установлен ли он, проверив таблицу mysql.component (эта информация скоро будет доступна и в Information_Schema ):

 mysql> select * from mysql.component;
 Empty set (0.02 sec

 

Если он еще не установлен, то его можно очень просто установить:

mysql> INSTALL COMPONENT 'file://component_validate_password';
 Query OK, 0 rows affected (0.12 sec)
 mysql> select * from mysql.component;
 +--------------+--------------------+------------------------------------+
 | component_id | component_group_id | component_urn                      |
 +--------------+--------------------+------------------------------------+
 |            1 |                  1 | file://component_validate_password |
 +--------------+--------------------+------------------------------------+
 1 row in set (0.01 sec)

 

После установки у вас будет доступ к новым переменным пароля проверки :

mysql> SHOW VARIABLES LIKE 'validate_password.%';
 +--------------------------------------+--------+
 | Variable_name                        | Value  |
 +--------------------------------------+--------+
 | validate_password.check_user_name    | ON     |
 | validate_password.dictionary_file    |        |
 | validate_password.length             | 8      |
 | validate_password.mixed_case_count   | 1      |
 | validate_password.number_count       | 1      |
 | validate_password.policy             | MEDIUM |
 | validate_password.special_char_count | 1      |
 +--------------------------------------+--------+
 7 rows in set (0.44 sec)

 

Как видите, можно определить несколько опций.

Давайте проверим параметры по умолчанию:

 mysql> create user 'andreyex' identified by 'andreyex';
 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
 mysql> create user 'andreyex' identified by 'andreyex1#';
 Query OK, 0 rows affected (0.02 sec)

 

Поддерживается любой символ, например, акценты:

mysql> set password for 'andreyex'='Lefréd#1';
 Query OK, 0 rows affected (0.17 sec)

 

Или даже лучше (или, по крайней мере, более забавно, чем борьба с клавиатурой Azerty против Qwerty при входе на консоль сервера).

 

истечение

Для администраторов MySQL возможно истечение срока действия пароля учетной записи. Это может быть установлено по умолчанию или для учетной записи пользователя.

Давайте создадим нашу последнюю учетную запись, срок действия которой истекает через 10 дней:

 mysql> ALTER USER 'andreyex' PASSWORD EXPIRE INTERVAL 90 DAY;
 Query OK, 0 rows affected (0.04 sec

 

Давайте сверимся с запросом из этого поста :

 mysql> select user, password_last_changed,
     -> concat(
     -> cast(
     ->  IFNULL(password_lifetime, @@default_password_lifetime) as signed)
     ->  + cast(datediff(password_last_changed, now()) as signed), " days") expires_in
     -> from mysql.user
     -> where 
     -> cast(
     ->  IFNULL(password_lifetime, @@default_password_lifetime) as signed)
     ->  + cast(datediff(password_last_changed, now()) as signed) >= 0 
     ->  and user not like 'mysql.%';
 +----------+-----------------------+------------+
 |  user    | password_last_changed | expires_in |
 +----------+-----------------------+------------+
 | andreyex | 2019-05-23 21:12:44   | 90 days    |
 | root     | 2019-05-23 12:23:22   | 0 days     |
 +----------+-----------------------+------------+
 2 rows in set (0.03 sec)

 

Политика повторного использования

Администраторы MySQL также могут запретить пользователю повторно использовать его старый пароль.

Эта политика может быть глобальной или для учетной записи.

Администратор базы данных может определить количество изменений пароля перед повторным использованием ( PASSWORD HISTORY). Или минимальная задержка перед разрешением повторного использования ( PASSWORD REUSE INTERVAL). Также возможно смешать оба.

 mysql> ALTER USER 'andreyex' PASSWORD HISTORY 2;
 Query OK, 0 rows affected (0.00 sec)
 mysql> set password for 'andreyex'='Lefréd#1';
 ERROR 3638 (HY000): Cannot use these credentials for 'andreyex@%' because they contradict 
the password history polic

 

Политика проверки

Начиная с MySQL 8.0.13, можно требовать, чтобы попытки изменить пароль учетной записи были проверены путем указания текущего пароля, подлежащего замене.

Этот параметр управляется ключевыми словами PASSWORD REQUIRE.

Это позволяет следующие значения:

  • PASSWORD REQUIRE CURRENT: пароль должен быть указан при смене пароля
  • PASSWORD REQUIRE CURRENT OPTIONAL: пароль может быть указан при попытке изменить пароль
  • PASSWORD REQUIRE CURRENT DEFAULT: следует за значением системной переменной password_require_current

Давай попробуем:

 mysql> ALTER user 'andreyex' PASSWORD REQUIRE CURRENT;
 Query OK, 0 rows affected (0.00 sec)

 

Теперь мы можем связаться с пользователем andreyex и попытаться сменить пароль:

 mysql> set password='andreyex#2';
 ERROR 13226 (HY000): Current password needs to be specified in the REPLACE clause in order 
to change it.
 mysql> set password='andreyex#2' replace 'andreyex#1';
 Query OK, 0 rows affected (0.02 sec)

 

Как вы могли видеть, что ключевое слово replace было обязательным.

 

Двойные активные пароли

В MySQL 8.0.14 (скоро) учетные записи пользователей могут иметь двойные пароли, обозначенные как первичные и вторичные пароли. Возможность двойного пароля позволяет беспрепятственно выполнять изменения учетных данных в процессе производства.

Изменение может быть сделано в два этапа:

  • изменить пароль, указав сохранение текущего пароля
  • отменить старый пароль, когда он больше не нужен

Давайте проиллюстрируем это:

 mysql> alter user 'andreyex' identified by 'andreyex#3' retain current password;
 Query OK, 0 rows affected (0.03 sec)

 

Попробуем снова подключиться со старым паролем и новым:

 $ mysql -uandreyex -pandreyex#2 -e 'select now()';
 mysql: [Warning] Using a password on the command line interface can be insecure.
 +---------------------+
 | now()               |
 +---------------------+
 | 2019-05-23 18:23:55 |
 +---------------------+
 $ mysql -uandreyex -pandreyex#3 -e 'select now()';
 mysql: [Warning] Using a password on the command line interface can be insecure.
 +---------------------+
 | now()               |
 +---------------------+
 | 2019-05-23 18:24:42 |
 +---------------------+

 

Работает как положено.

Из таблицы mysql.user видно, активен ли у пользователя старый пароль, проверив значение User_attributes :

 mysql> select User_attributes from mysql.user where user='andreyex'\G
 * 1. row *
 User_attributes: {"additional_password": 
"$A$005$\f>v1,@=g{u\u0019_%!4G\nYTzinrMiGWldNLrJVqI.7XTfUD5tOfw/s8EMLu8WokukD"}
 1 row in set (0.00 sec)

 

Теперь пришло время сбросить старый пароль:

 mysql> ALTER USER 'andreyex' DISCARD OLD PASSWORD;
 Query OK, 0 rows affected (0.04 sec)

 

Теперь невозможно установить соединение со старым паролем:

 $ mysql -uandreyex -pandreyex#2 -e 'select now()';
 ERROR 1045 (28000): Access denied for user 'andreyex'@'localhost' (using password: YES)

 

Блокировка аккаунта

И наконец, не забывайте, что всегда можно заблокировать или разблокировать учетную запись:

mysql> ALTER USER 'andreyex' ACCOUNT LOCK;
 Query OK, 0 rows affected (0.01 sec)

 

И если вы попытаетесь подключиться снова с заблокированной учетной записью, вы увидите следующую ошибку:

 $ mysql -uandreyex -pandreyex#3 
 ERROR 3118 (HY000): Access denied for user 'andreyex'@'localhost'. Account is locked.

 

Мы надеемся, что этот пост даст вам лучший обзор возможностей управления паролями учетных записей в MySQL 8.0.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 10

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

    Отправить ответ

    Войти с помощью: 
    avatar
      Подписаться  
    Уведомление о

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам:

    Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

    badge
    Обратный звонок 1
    Отправить
    galka

    Спасибо! Ваша заявка принята

    close
    galka

    Спасибо! Ваша заявка принята

    close