sql >> Databáze >  >> RDS >> Mysql

CHYBA 1698 (28000):Přístup odepřen uživateli 'root'@'localhost'

Některé systémy jako Ubuntu, MySQL používají Plugin UNIX auth_socket ve výchozím nastavení.

V zásadě to znamená, že:uživatelé db_users, kteří jej používají, budou "ověřeni" pověřením uživatele systému. Můžete vidět, zda váš root uživatel se nastaví takto:

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 můžete vidět v dotazu, root uživatel používá auth_socket plugin.

Existují dva způsoby, jak to vyřešit:

  1. Můžete nastavit kořen použijte mysql_native_password plugin
  2. Můžete vytvořit nového uživatele db_user s vámi system_user (doporučeno)

Možnost 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

Možnost 2: (nahraďte YOUR_SYSTEM_USER uživatelským jménem, ​​které máte)

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

Pamatujte, že pokud použijete možnost #2, budete se muset připojit k MySQL jako uživatelské jméno vašeho systému (mysql -u YOUR_SYSTEM_USER ).

Poznámka: Na některých systémech (např. Debian 9 (Roztáhnout)) plugin 'auth_socket' se nazývá 'unix_socket' , takže odpovídající příkaz SQL by měl být:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Z komentáře @andy se zdá, že MySQL 8.x.x aktualizoval/nahradil auth_socket pro caching_sha2_password . Nemám nastavení systému s MySQL 8.x.x, abych to otestoval. Výše uvedené kroky by vám však měly pomoci problém pochopit. Zde je odpověď:

Jednou změnou od MySQL 8.0.4 je, že nový výchozí ověřovací plugin je 'caching_sha2_password'. Nový 'YOUR_SYSTEM_USER' bude mít tento ověřovací plugin a můžete se nyní přihlásit z prostředí Bash pomocí "mysql -u YOUR_SYSTEM_USER -p" a zadat heslo pro tohoto uživatele ve výzvě. Krok „UPDATE user SET plugin“ není potřeba.

Pro aktualizaci výchozího ověřovacího pluginu 8.0.4 viz https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/



  1. Základní správa MaxScale pomocí MaxCtrl pro MariaDB Cluster

  2. Jak nainstalovat SQL Server na Ubuntu 18.04

  3. Výjimka v JPA při použití seed souboru pro PostgreSQL

  4. Jak funguje TIMESTAMPADD() v MariaDB