Odmowa dostępu dla użytkownika „test” @ „localhost” (przy użyciu hasła: TAK) z wyjątkiem użytkownika root

102

Mam problem z użytkownikiem innym niż root / admin mysql, wykonuję poniższe kroki, aby utworzyć użytkownika i jego uprawnienia, popraw mnie, jeśli robię źle,

Instaluję mysqlna RHEL 5.7 64bit, pakiety są wymienione poniżej, kiedy już to zrobię, rpm installjesteśmy

  1. tworzenie bazy danych mysql za pomocą mysql_install_db, a następnie
  2. uruchomienie usługi mysql
  3. używając mysql_upgraderównież robimy na serwerze.

Po tym procesie mogę zalogować się jako rootużytkownik inny niż root, ale nie mogę zalogować się na serwer:

[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)

Oto problem, przed którym stoję, czy jest jakieś rozwiązanie?

user3061726
źródło
Czy możesz zalogować się jako root, a następnie zrobićSELECT * FROM mysql.user
Noam Rathaus
1
Zaakceptuj odpowiedź, która Ci odpowiada, aby inni użytkownicy wiedzieli, jak rozwiązałeś problem.
Użytkownik, który nie jest użytkownikiem

Odpowiedzi:

60

Nie nadawaj wszystkich uprawnień do wszystkich baz danych użytkownikowi innemu niż root, nie jest to bezpieczne (a masz już "root" z tą rolą)

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

Ta instrukcja tworzy nowego użytkownika i przyznaje mu wybrane uprawnienia. TO ZNACZY:

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

Zapoznaj się z dokumentacją, aby zobaczyć szczegółowe informacje na temat wszystkich uprawnień

EDYCJA: możesz poszukać więcej informacji za pomocą tego zapytania (zaloguj się jako „root”):

select Host, User from mysql.user;

Aby zobaczyć, co się stało

Alberto Megía
źródło
Nie zgadzam się z tym stwierdzeniem dotyczącym roota. Tak, nie powinieneś dawać super przywilejów, kiedy chcesz. Jednak generalnie nie powinieneś używać kont współdzielonych, ponieważ nie masz odpowiedniej ścieżki audytu w bazie danych. Jeśli musisz mieć wspólne konta, takie jak root, potrzebujesz innych rzeczy owiniętych wokół niego, aby zapewnić nienaruszoną ścieżkę audytu.
krad
37

Jeśli łączysz się z MySQL za pomocą komputera zdalnego (przykładowe środowisko pracy) itp., Wykonaj następujące kroki, aby wyeliminować ten błąd w systemie operacyjnym, na którym jest zainstalowany MySQL

mysql -u root -p

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

Spróbuj zalogować się do instancji MYSQL.
Pomogło mi to wyeliminować ten błąd.

Makarand Kulkarni
źródło
1
Nawet to nie działa, ponieważ wyświetla błąd nawet podczas uruchamiania „mysql -u root -p”
Marian Klühspies
26

Próbować:

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

Lub jeszcze lepiej: mysql_setpermissionaby stworzyć użytkownika

Noam Rathaus
źródło
1
To nie rozwiązuje problemu. UTWÓRZ UŻYTKOWNIKA 'goldy' @ '%' ZIDENTYFIKOWANEGO PRZEZ 'some_pass'; to prawidłowe zapytanie
pratim_b
Z jakiegoś powodu to, %co powinno działać dla wszystkich hostów, nie rozwiązuje tego problemu. Więc określając, localhostże powinno działać. Jeśli to NIE działa, coś jest nie tak w mysql
Noam Rathaus
14

Wygląda na to, że próbujesz ustawić użytkownika jako „złoty” @ „%”, ale inny użytkownik o nazwie „złoty” @ „localhost” przeszkadza / ma pierwszeństwo.

Wykonaj to polecenie, aby zobaczyć użytkowników:

SELECT user,host FROM mysql.user;

Powinieneś zobaczyć dwa wpisy:

1) użytkownik = złoty, host =%

2) użytkownik = złoty, host = localhost

Wykonaj następujące polecenie:

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

Uruchom ponownie MySQL Workbench.

Następnie ponownie wykonaj oryginalne polecenia:

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

Następnie, gdy próbujesz zalogować się do MySQL, wpisz to w ten sposób:

wprowadź opis obrazu tutaj

Kliknij „Testuj połączenie” i wprowadź swoje hasło „hasło”.

Gen
źródło
2
To jedyne rozwiązanie, które tu znalazłem, miało jakieś znaczenie. Dziękuję dobry panie.
Sumuk Shashidhar
8

Najpierw utworzyłem użytkownika za pomocą:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

Po wygooglowaniu i obejrzeniu tego zaktualizowałem hasło użytkownika za pomocą:

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

a później mogłem się połączyć.

ako
źródło
3

Dla każdego, kto wykonał wszystkie rady, ale problem nadal występuje.

Sprawdź procedurę składowaną i wyświetl DEFINERS. Ci definicyjni mogą już nie istnieć.

Mój problem pojawił się, gdy zmieniliśmy hosta wieloznacznego (%) na specyficzny dla adresu IP, dzięki czemu baza danych jest bezpieczniejsza. Niestety, są pewne widoki, które nadal używają „user” @ „%”, mimo że „user” @ „172 ....” jest technicznie poprawne.

Yorro
źródło
Dzięki za wprowadzenie mnie na właściwą drogę. Nie wiedziałem nawet o ustawieniu zabezpieczeń SQL w widokach i procedurach składowanych. Skończyło się na tym, że ustawiłem SQL Security na Invoker w moich widokach, tak aby korzystał z uprawnień użytkownika wykonującego polecenie, a nie użytkownika, który utworzył widok. Oto link do odniesienia: dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
Justin
2

Ja też mam podobny problem, a później stwierdziłem, że to dlatego, że zmieniłem nazwę hosta (nie localhost).

Dlatego rozwiązuję to, określając rozszerzenie --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1
4af2e9eb6
źródło
2

W zależności od sposobu tworzenia użytkownika MySQL interpretuje w inny sposób. Na przykład, jeśli utworzysz takiego użytkownika:

create user user01 identified by 'test01';

MySQL oczekuje, że nadasz pewne przywileje przy użyciu grant all on <your_db>.* to user01;

Nie zapomnij flush privileges;

Ale jeśli utworzysz takiego użytkownika (przekazując adres IP), musisz go zmienić na:

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

więc, aby nadać pewne uprawnienia, musisz to zrobić:

grant all on <your_db>.* to user02@localhost;
flush privileges;
Antonio Marcos
źródło
2

Upewnij się, że użytkownik ma wpis localhost w tabeli użytkowników. To był problem, który miałem. DAWNY:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
RyanT
źródło
1

Irytujące wyszukiwanie, które pojawia się po wyszukaniu tego komunikatu o błędzie:

Odmowa dostępu dla użytkownika „someuser @ gdzieś” (przy użyciu hasła: TAK)

Dla mnie problemem nie było umieszczenie hasła w cudzysłowie. na przykład. Musiałem użyć -p'password'zamiast-ppassword

routeburn
źródło
0

W moim przypadku ten sam błąd występuje, ponieważ próbowałem użyć mysql, wpisując po prostu „mysql” zamiast „mysql -u root -p”

lfvv
źródło
0

podłącz swój serwer z mysqlworkbench i uruchom to polecenie-> ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'yourpassword';

Sachin
źródło
-8

Po prostu dodaj nazwę komputera zamiast „localhost” w nazwie hosta lub adresie hosta MySQL.

vipin
źródło