Как сменить политику паролей в mysql 5.7.xx
Как сменить политику паролей в mysql 5.7.xx
На серверах с Ubuntu, использующей MySQL 5.7 и более поздние версии, пользователь root в MySQL по умолчанию авторизуется с помощью плагина auth_socket, а не по паролю.
Это в целом более безопасно и удобно во многих случаях, но не в случае, когда вам необходимо организовать доступ к MySQL со стороны сторонней программы, например, phpMyAdmin.
Для того, чтобы пользователь root в MySQL мог использовать пароль для входа в систему вам необходимо изменить метод аутентификации с auth_socket на mysql_native_password.
Далее проверьте, какой метод аутентификации используется для каждого из ваших пользователей MySQL:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Вывод
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
В этом примере ваш пользователь root использует аутентификацию с помощью плагина auth_socket. Для изменения этой настройки на использование пароля используйте следующую команду ALTER USER. Не забудьте изменить password на ваш сильный пароль:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Далее выполните команду FLUSH PRIVILEGES, которая применит внесённые изменения.
Проверьте методы авторизации для пользователей ещё раз для того, чтобы убедиться, что пользователь root более не использует плагин auth_socket для авторизации:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Вывод
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
Как можно видеть на представленном выводе теперь root пользователь MySQL аутентифицируется с использованием пароля.
***
Посмотреть текущую политику паролей можно так:
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| 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.06 sec)
Видим, что установлена MEDIUM политика - она требует длину пароля от 50 символов.
Сменить на LOW можно так длина пароля от 8 символов:
mysql> SET GLOBAL validate_password.policy=LOW;
Query OK, 0 rows affected (0.02 sec)
Можно также прописать политику в файле /var/lib/mysql/.my.cnf.
[mysqld]
validate_password.policy=LOW
После установки надо перегрузить сервис.
Присвоение прав с версии 8.0
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';
ALTER USER 'jequitffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;