Немного девичьих IT-шных записок

четверг, 5 октября 2017 г.

Не пускает в MySQL сразу после установки и новая парольная политика MySQL 5.7

Версия ОС: CentOS 6.9
Версия ПО: MySQL-server 5.7.19

Столкнулась с такой проблемой, установила mysql-server и сразу попыталась зайти в mysql, создать нужную базу.. Но зайти под root-ом в mysql так и не получилось. Ни с паролем, ни без пароля, и вопроса о задании пароля при установке, тоже не было.
Ломимся в mysql и получаем подобные ошибки:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Хочу обратить внимание на то, что на форумах довольно много советов на тему, как поменять пароль для пользователя. Однако я столкнулась с тем, что в моей системной базе mysql в таблице user нет поля password. 👀 Wtf?! Версию mysql я ставила 5.7.. В этой версии поле password решили заменить authentication_string. И теперь пользовательские пароли хранятся именно там.

Запускаем mysql в режиме с отключением проверки прав доступа:

service mysqld stop
mysqld_safe --skip-grant-tables &

Подключаемся к системной базе данных:

mysql
mysql> use mysql; 

И задаем пароль нашему root-у:

mysql> update user set authentication_string=password('qwerty') where user='root'; 

У меня в поле с отметкой об истечении пароля стоял Y, который позже был причиной появившейся ошибки:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

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

mysql> update user set password_expired='N' where user='root';
mysql> exit

Перезапускаем демона:

service mysqld restart

И радуемся работающему входу с паролем 😄



P.S.

В версии mysql 5.7 ужесточились требования к парольной политике. Интересующие нас параметры записаны в глобальных переменных, которые можно посмотреть при помощи команды:

show variables like 'validate_password%';

validate_password_length 5 
validate_password_mixed_case_count 1
validate_password_number_count 1
validate_password_policy MEDIUM
validate_password_special_char_count 1

Каждую переменную можно поменять. Например, чтобы изменить минимальную длину паролей до 5 символов:

set global validate_password_length = 5; 

Обязательность использования символов в верхнем регистре можно изменить:

set global validate_password_mixed_case_count = 0;

Количество цифр в пароле, или вообще их необязательность, как в этом примере, можно задать так:

set global validate_password_number_count = 0;

И присутствие специальных символов в пароле меняется так:

set global validate_password_special_char_count = 0;

В целом за парольную политику отвечает переменная validate_password_policy, она может принимать значения LOW, MEDIUM, STRONG.