Mysql
 sql >> Baza danych >  >> RDS >> Mysql

BŁĄD 1698 (28000):Odmowa dostępu dla użytkownika „root”@„localhost”

Niektóre systemy, takie jak Ubuntu, MySQL używa Wtyczka UNIX auth_socket domyślnie.

Zasadniczo oznacza to, że:db_users używający go, zostanie "uwierzytelniony" przez poświadczenia użytkownika systemu. Możesz sprawdzić, czy Twój root użytkownik jest skonfigurowany w ten sposób, wykonując następujące czynności:

sudo mysql -u root # I had to use "sudo" since it was a new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

Jak widać w zapytaniu, root użytkownik używa auth_socket wtyczka.

Można to rozwiązać na dwa sposoby:

  1. Możesz ustawić korzeń użytkownik używa mysql_native_password wtyczka
  2. Możesz utworzyć nowego db_user z tobą system_user (zalecane)

Opcja 1:

sudo mysql -u root # I had to use "sudo" since it was new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

sudo service mysql restart

Opcja 2: (zastąp TWÓJ_UŻYTKOWNIK SYSTEMU nazwą użytkownika, którą posiadasz)

sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY 'YOUR_PASSWD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

sudo service mysql restart

Pamiętaj, że jeśli użyjesz opcji nr 2, będziesz musiał połączyć się z MySQL jako swoją systemową nazwą użytkownika (mysql -u YOUR_SYSTEM_USER ).

Uwaga: W niektórych systemach (np. Debian 9 (Rozciąganie)) wtyczka 'auth_socket' nazywa się 'unix_socket' , więc odpowiednie polecenie SQL powinno mieć postać:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Z komentarza @andy'ego wynika, że ​​MySQL 8.x.x zaktualizował/zastąpił auth_socket dla caching_sha2_password . Nie mam konfiguracji systemu z MySQL 8.x.x, aby to przetestować. Powyższe kroki powinny jednak pomóc w zrozumieniu problemu. Oto odpowiedź:

Jedną zmianą w MySQL 8.0.4 jest to, że nową domyślną wtyczką uwierzytelniającą jest „caching_sha2_password”. Nowy 'UŻYTKOWNIK_TWOJEGO_SYSTEMU' będzie miał tę wtyczkę uwierzytelniającą i możesz teraz zalogować się z powłoki Bash za pomocą "mysql -u UŻYTKOWNIK_TWOJEGO_SYSTEMU -p" i podać hasło dla tego użytkownika w wierszu polecenia. Nie ma potrzeby wykonywania kroku „AKTUALIZUJ wtyczkę użytkownika SET”.

Aby zapoznać się z aktualizacją domyślnej wtyczki uwierzytelniania 8.0.4, zobacz https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zrozumienie transakcji pdo mysql

  2. Jak włączyć dziennik zapytań MySQL?

  3. Jak znaleźć nieistniejące dane z innej tabeli przez JOIN?

  4. Doctrine Query Language pobierz maks./najnowszy wiersz na grupę

  5. Ostrzeżenie:mysql_fetch_array() oczekuje, że parametr 1 będzie zasobem, podana wartość logiczna w