Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

LỖI 1698 (28000):Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost'

Một số hệ thống như Ubuntu, MySQL đang sử dụng Plugin auth_socket UNIX theo mặc định.

Về cơ bản, điều đó có nghĩa là: db_users sử dụng nó, sẽ được "xác thực" bởi thông tin đăng nhập của người dùng hệ thống. Bạn có thể xem nếu root của mình người dùng được thiết lập như vậy bằng cách thực hiện như sau:

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

Như bạn có thể thấy trong truy vấn, root người dùng đang sử dụng auth_socket plugin.

Có hai cách để giải quyết vấn đề này:

  1. Bạn có thể đặt root người dùng sử dụng mysql_native_password plugin
  2. Bạn có thể tạo một db_user mới với bạn system_user (khuyến nghị)

Tùy chọn 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

Tùy chọn 2: (thay thế YOUR_SYSTEM_USER bằng tên người dùng bạn có)

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

Hãy nhớ rằng nếu bạn sử dụng tùy chọn số 2, bạn sẽ phải kết nối với MySQL làm tên người dùng hệ thống của mình (mysql -u YOUR_SYSTEM_USER ).

Lưu ý: Trên một số hệ thống (ví dụ: Debian 9 (Stretch)) plugin 'auth_socket' được gọi là 'unix_socket' , vì vậy lệnh SQL tương ứng phải là:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Từ nhận xét của @ andy, có vẻ như MySQL 8.x.x đã cập nhật / thay thế auth_socket cho caching_sha2_password . Tôi không có thiết lập hệ thống với MySQL 8.x.x để kiểm tra điều này. Tuy nhiên, các bước trên sẽ giúp bạn hiểu vấn đề. Đây là câu trả lời:

Một thay đổi kể từ MySQL 8.0.4 là plugin xác thực mặc định mới là 'caching_sha2_password'. 'YOUR_SYSTEM_USER' mới sẽ có plugin xác thực này và bạn có thể đăng nhập từ Bash shell ngay bây giờ bằng "mysql -u YOUR_SYSTEM_USER -p" và cung cấp mật khẩu cho người dùng này khi được nhắc. Không cần đến bước "CẬP NHẬT người dùng ĐẶT plugin".

Đối với bản cập nhật plugin xác thực mặc định 8.0.4, hãy xem 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. Làm cách nào để lưu trữ các giá trị NULL trong các trường datetime trong MySQL?

  2. Làm cách nào để sử dụng đúng đối tượng PDO cho truy vấn SELECT được tham số hóa

  3. MySQL tương đương STUFF () trong SQL Server là gì?

  4. Cách bảo mật MySQL:Phần thứ hai

  5. kết quả kép trong mảng của tôi (mysql_fetch_array)