Доступ запрещен для пользователя 'test' @ 'localhost' (с паролем: ДА), кроме пользователя root

100

Я столкнулся с проблемой с пользователем mysql без полномочий root / admin, я выполняю следующие шаги для создания пользователя и его привилегий, исправьте меня, если я делаю неправильно,

Я устанавливаю mysqlна RHEL 5.7 64bitпакеты приведены ниже после того , как я сделал rpm installмы

  1. создание mysql db с помощью mysql_install_db, затем
  2. запуск службы mysql, затем
  3. используя mysql_upgradeтакже мы делаем для сервера.

После этого процесса я могу войти в систему, rootно с пользователем без полномочий root я не могу войти на сервер:

[root@clustertest3 ~]# rpm -qa | grep MySQL
MySQL-client-advanced-5.5.21-1.rhel5
MySQL-server-advanced-5.5.21-1.rhel5


[root@clustertest3 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[root@clustertest3 ~]# ls -ld /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Nov  30 11:09 /var/lib/mysql/mysql.sock

mysql> CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)

[root@clustertest3 ~]# mysql -ugolden -p
Enter password:
ERROR 1045 (28000): Access denied for user 'golden'@'localhost' (using password: YES)

Это проблема, с которой я столкнулся, есть ли решение?

user3061726
источник
Можете ли вы войти в систему как root, а затем сделать?SELECT * FROM mysql.user
Ноам Ратхаус
1
Примите ответ, который сработал для вас, чтобы другие пользователи знали, как вы решили свою проблему.
Пользователь, который не является пользователем

Ответы:

59

Не предоставляйте все привилегии для всех баз данных пользователю без полномочий root, это небезопасно (и у вас уже есть «root» с этой ролью)

GRANT <privileges> ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Этот оператор создает нового пользователя и предоставляет ему выбранные привилегии. IE:

GRANT INSERT, SELECT, DELETE, UPDATE ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

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

РЕДАКТИРОВАТЬ: вы можете найти дополнительную информацию с помощью этого запроса (войдите как "root"):

select Host, User from mysql.user;

Чтобы увидеть, что случилось

Альберто Мегиа
источник
Я не согласен с этим утверждением о root. Да, вы не должны волей-неволей давать супер привилегии. Однако вам также обычно не следует использовать общие учетные записи, так как у вас нет надлежащего контрольного журнала в БД. Если у вас должны быть общие учетные записи, такие как root, вам необходимо обернуть вокруг него другие вещи, чтобы обеспечить целостность контрольного журнала.
крад
36

Если вы подключаетесь к MySQL с помощью удаленного компьютера (пример рабочей среды) и т. Д., Выполните следующие действия, чтобы устранить эту ошибку в ОС, где установлен MySQL.

mysql -u root -p

CREATE USER '<<username>>'@'%%' IDENTIFIED BY '<<password>>';
GRANT ALL PRIVILEGES ON * . * TO '<<username>>'@'%%';
FLUSH PRIVILEGES;

Попробуйте войти в экземпляр MYSQL.
Это помогло мне устранить эту ошибку.

Макаранд Кулкарни
источник
1
Даже это не работает, так как это вызывает ошибку даже при запуске «mysql -u root -p»
Мариан Клюхспис
26

Пытаться:

CREATE USER 'golden'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'localhost';
FLUSH PRIVILEGES;

Или еще лучше использовать: mysql_setpermissionсоздать пользователя

Ноам Ратхаус
источник
1
Это не решает проблемы. СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'goldy' @ '%' ИДЕНТИФИЦИРОВАНО 'some_pass'; - правильный запрос
pratim_b 03
По какой-то причине его, %который должен работать для всех хостов, не решает эту проблему. Так что, указав, localhostон должен работать. Если это НЕ РАБОТАЕТ, что-то не так в mysql
Ноам Ратхаус
13

Похоже, вы пытаетесь сделать пользователя «golden» @ «%», но другой пользователь с именем «golden» @ «localhost» мешает / имеет приоритет.

Выполните эту команду, чтобы увидеть пользователей:

SELECT user,host FROM mysql.user;

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

1) пользователь = золотой, хост =%

2) пользователь = золотой, хост = локальный

Выполните эту команду:

DROP User 'golden'@'localhost';
DROP User 'golden'@'%';

Перезапустите MySQL Workbench.

Затем снова выполните исходные команды:

CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';

Затем, когда вы попытаетесь войти в MySQL, введите его так:

введите описание изображения здесь

Нажмите «Проверить соединение» и введите свой пароль «пароль».

Ген
источник
2
Это единственное решение, которое я нашел здесь, которое имело какое-то значение. Спасибо, сэр.
Сумук Шашидхар
9

Сначала я создал пользователя, используя:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

После того , как я погуглил и увидел это , я обновил пароль пользователя, используя:

SET PASSWORD FOR 'user'@'localhost' = PASSWORD('password_txt');

и я мог подключиться позже.

ако
источник
3

Для всех, кто делал все советы, но проблема все еще сохраняется.

Проверьте хранимую процедуру и просмотрите ОПРЕДЕЛИТЕЛИ. Эти определяющие могут больше не существовать.

Моя проблема возникла, когда мы изменили хост с подстановочными знаками (%) на IP-адрес, что сделало базу данных более безопасной. К сожалению, есть некоторые представления, которые все еще используют 'user' @ '%', хотя 'user' @ '172 ....' технически корректно.

Йорро
источник
Спасибо, что направили меня по правильному пути. Я даже не знал о настройке безопасности SQL для представлений и хранимых процедур. В итоге я установил SQL Security для Invoker в своих представлениях, чтобы он использовал разрешения пользователя, выполняющего команду, а не пользователя, который создает представление. Вот ссылка для справки: dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
Джастин
2

У меня также есть аналогичная проблема, и позже я обнаружил, что это потому, что я изменил свое имя хоста (не localhost ).

Поэтому я решаю это, указав --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1
4af2e9eb6
источник
2

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

create user user01 identified by 'test01';

MySQL ожидает, что вы дадите некоторую привилегию, используя grant all on <your_db>.* to user01;

Не забывай flush privileges;

Но если вы создаете такого пользователя (передавая IP-адрес), вы должны изменить его на:

create user 'user02'@'localhost' identified by 'teste02';

Итак, чтобы предоставить некоторые привилегии, вы должны сделать это:

grant all on <your_db>.* to user02@localhost;
flush privileges;
Антонио Маркос
источник
2

Убедитесь, что у пользователя есть запись localhost в таблице пользователей. Это была моя проблема. EX:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
RyanT
источник
0

В моем случае такая же ошибка произошла из-за того, что я пытался использовать mysql, просто набрав «mysql» вместо «mysql -u root -p».

lfvv
источник
0

подключите свой сервер из mysqlworkbench и запустите эту команду-> ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'yourpassword';

Сачин
источник
0

Для раздражающего поиска, попадающего сюда после поиска этого сообщения об ошибке:

Доступ запрещен для пользователя someuser @ где-то (с паролем: ДА)

Проблема для меня заключалась не в том, чтобы заключить пароль в кавычки. например. Мне нужно было использовать -p'password'вместо-ppassword

Routeburn
источник
-8

Просто добавьте имя компьютера вместо localhost в имя хоста или адрес хоста MySQL.

vipin
источник