genbodev2
5/22/2017 - 10:43 AM

Проблема с доступом ERROR 1045 (28000): Access denied на примере CentOS 7 и MariaDB

Проблема с доступом ERROR 1045 (28000): Access denied на примере CentOS 7 и MariaDB

/* Проблема показала себя при попытке импортировать dump */

[root@localhost ~]# mysql -u root -ppass kpidrive < /home/igor/projects/kpidrive/backend/dump.sql;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

/* Пароль точно правильный - в чем же дело? Понятия не имею, но помог сброс пароля */

/* Для начала - проверим список пользователей mysql */

/* Входим в mysql под пользователем root, вводим пароль */
mysql -u root -p

/* Это при условии, что mysql запущен, ниже команды запуска и остановки */
/etc/init.d/mysql start
/etc/init.d/mysql stop

/* Список пользователей */
MariaDB [(none)]> SELECT user, host, password, plugin, authentication_string FROM mysql.user;

/* Сбрасывать нужно пользователя root, поэтому выведем только его */
MariaDB [(none)]> SELECT user, host, password, plugin, authentication_string FROM mysql.user WHERE user='root';

/* Нас будет интересовать одна строка. Будем менять хеш поля password */
root | localhost             | *22A99BA288DB55E8E230679259740873101CD636

/* Останавливаем процесс mysql командой выше, или нижеприведенной */
systemctl stop mariadb

/* Чтобы сбросить пароль у root нужно запустить mysql в специальном режиме */
mysqld_safe --skip-grant-tables --skip-networking &

/* Теперь можно запустить процесс без пароля */
mysql -u root

/* Появиться приглашение */
Welcome to the MariaDB monitor...

/* Пробуем установить новый пароль как указано в документации */
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

/* Но нам сообщают, что в режиме игнорирования прав - этот запрос не выполнится */
ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement

/* Сбросим привилегии */
MariaDB [(none)]> FLUSH PRIVILEGES;

/* Попытаемся сменить пароль */
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

/* Но опять получаем ошибку. Анонимные пользователи - не могут модифицировать пользовательские настройки */
ERROR 1131 (42000): You are using MariaDB as an anonymous user and anonymous users are not allowed to modify user settings

/* Казалось бы - тупик. Но нет. Мы можем сменить пароль через обычный update у всех пользователей root */
MariaDB [(none)]> update mysql.user set password=password('MyNewPass') where user='root';

/* Снова сбросим привилегии */
MariaDB [(none)]> FLUSH PRIVILEGES;

/* Опять посмотрим пользователей root */
MariaDB [(none)]> select user, host, password, plugin, authentication_string from mysql.user where user='root';

/* Теперь видно, что у всех root сменился хеш пароля. В том числе и у localhost */
root | localhost           | *A294441C38B03BE12E32771ADDF7976B0DDB8164

/* Теперь попытаемся снова сменить пароль так как говорит нам документация */
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass'); 

/* Но вновь получим ошибку */
ERROR 1131 (42000): You are using MariaDB as an anonymous user and anonymous users are not allowed to modify user settings

/* Почему? Потому что мы по прежнему находимся в текущей сессии. Нужно выйти из нее */
MariaDB [(none)]> quit

/* И зайти под root с новым паролем */
mysql -u root -pMyNewPass

/* Теперь документированная смена пароля сработает */
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
Query OK, 0 rows affected (0.00 sec)

/* Не забываем про сброс прав */
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

/* Остановим процессы */
ps aufx | grep mysql | grep -v grep
root      2747  0.0  0.0 113264  1680 pts/0    S    17:48   0:00          \_ /bin/sh /bin/mysqld_safe --skip-grant-tables --skip-networking
mysql     3105  0.3  5.0 515644 95948 pts/0    Sl   17:48   0:00          |   \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=/var/log/mysqld.log --open-files-limit=8192 --pid-file=centos7.localdomain.pid --socket=/var/lib/mysql/mysql.sock

kill -9 2747 3105

/* Перезапустим mysql уже известной командой или */
systemctl start mariadb

/* Все готово. Но можно еще забить пароль в секцию client в одинарных кавычках (/root/.my.cnf) */
cat /root/.my.cnf
[client]
user=root
password='MyNewPass'

/* well done */
mysqladmin ver
mysqladmin  Ver 9.1 Distrib 10.1.19-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Server version          10.1.19-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 32 sec

Threads: 1  Questions: 1  Slow queries: 0  Opens: 18  Flush tables: 1  Open tables: 11  Queries per second avg: 0.031



https://community.centminmod.com/threads/how-to-reset-mysql-root-user-password-for-centos-7-mariadb-10-1-19.9811/