Доступ заборонено для користувача 'test' @ 'localhost' (з використанням пароля: ТАК), крім кореневого користувача


100

Я зіткнувся з проблемою з користувачем mysql, не користувачем root / admin, я виконую наведені нижче дії для створення користувача та його привілеїв.

я встановлюю mysqlна RHEL 5.7 64bit, пакети згадані нижче, як тільки я зробив те, що rpm installми є

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

Після цього процесу я можу ввійти як, 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)

Це проблема, з якою я стикаюся, чи є якесь рішення?


Чи можете ви увійти як root, а потімSELECT * FROM mysql.user
Noam Rathaus

1
Прийміть відповідну для вас відповідь, щоб інші користувачі знали, як ви вирішили свою проблему.
Користувач, який не є користувачем

Відповіді:


59

Не надайте всі права на всі бази даних некореневому користувачеві, це не безпечно (і ви вже маєте "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"
Marian Klühspies

25

Спробуйте:

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

Або ще краще використовувати: mysql_setpermissionдля створення користувача


1
Це не вирішує проблему. СТВОРИТИ КОРИСТУВАЧА 'goldy' @ '%' ІДЕНТИФІКОВАНО 'some_pass'; є дійсним запитом
pratim_b

Чомусь той, %який повинен працювати на всіх хостів, не вирішує його. Отже, вказавши, localhostце має спрацювати. Якщо це НЕ працює, щось не працює в mysql
Noam Rathaus

13

Схоже, ви намагаєтеся зробити користувача "золотим" @ "%", але інший користувач з ім'ям "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
Це єдине рішення, яке я знайшов тут, яке мало якесь значення. Дякую доброму сер.
Сумук Шашидхар

8

Спочатку я створив користувача за допомогою:

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

2

Переконайтеся, що у користувача є запис localhost у таблиці користувачів. Це була проблема, яку я мав. ЕКС:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

1

Відповідно до того, як ви створюєте свого користувача, 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;

0

У моєму випадку трапляється та сама помилка, тому що я намагався використовувати mysql, просто ввівши "mysql" замість "mysql -u root -p"


0

підключіть свій сервер від mysqlworkbench і запустіть цю команду-> ЗМІНИТИ КОРИСТУВАЧА 'root' @ 'localhost' ІДЕНТИФІКОВАНО 'yourpassword';


0

Для дратівливого пошуку, що потрапляє сюди після пошуку цього повідомлення про помилку:

Відмовлено в доступі для користувача 'someuser @ where' (з використанням пароля: ТАК)

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


-8

Просто додайте ім'я комп'ютера замість "localhost" в ім'я хосту або адресу хосту MySQL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.