Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

GALAT 1698 (28000):Akses ditolak untuk pengguna 'root'@'localhost'

Beberapa sistem seperti Ubuntu, MySQL menggunakan Plugin auth_socket UNIX secara default.

Pada dasarnya ini berarti bahwa:db_users menggunakannya, akan "diautentikasi" oleh kredensial pengguna sistem. Anda dapat melihat apakah root . Anda pengguna diatur seperti ini dengan melakukan hal berikut:

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 |
+------------------+-----------------------+

Seperti yang Anda lihat dalam kueri, root pengguna menggunakan auth_socket pengaya.

Ada dua cara untuk menyelesaikan ini:

  1. Anda dapat mengatur root pengguna untuk menggunakan mysql_native_password pengaya
  2. Anda dapat membuat db_user baru dengan Anda system_user (disarankan)

Opsi 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

Opsi 2: (ganti YOUR_SYSTEM_USER dengan nama pengguna yang Anda miliki)

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

Ingat bahwa jika Anda menggunakan opsi #2, Anda harus terhubung ke MySQL sebagai nama pengguna sistem Anda (mysql -u YOUR_SYSTEM_USER ).

Catatan: Pada beberapa sistem (mis., Debian 9 (Peregangan)) plugin 'auth_socket' disebut 'unix_socket' , jadi perintah SQL yang sesuai seharusnya:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Dari komentar @andy tampaknya MySQL 8.x.x memperbarui/mengganti auth_socket untuk caching_sha2_password . Saya tidak memiliki pengaturan sistem dengan MySQL 8.x.x untuk menguji ini. Namun, langkah-langkah di atas akan membantu Anda memahami masalahnya. Ini jawabannya:

Satu perubahan pada MySQL 8.0.4 adalah bahwa plugin otentikasi default baru adalah 'caching_sha2_password'. 'YOUR_SYSTEM_USER' yang baru akan memiliki plugin autentikasi ini dan Anda dapat masuk dari shell Bash sekarang dengan "mysql -u YOUR_SYSTEM_USER -p" dan memberikan kata sandi untuk pengguna ini pada prompt. Tidak perlu langkah "PERBARUI plugin SET pengguna".

Untuk pembaruan plugin autentikasi default 8.0.4, lihat 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. Mengambil catatan terakhir di setiap grup - MySQL

  2. Apa Nama Batasan Default di MySQL?

  3. Penjadwal Acara MySQL pada waktu tertentu setiap hari

  4. Menetapkan nilai kolom sebagai nama kolom dalam hasil kueri SQL

  5. Berapa ukuran kueri maksimum untuk mysql?