LRI 1698 (28000): Truy cập bị từ chối cho người dùng 'root' @ 'localhost'


382

Tôi đang thiết lập một máy chủ mới và tiếp tục gặp vấn đề này.

Khi tôi cố gắng đăng nhập vào cơ sở dữ liệu MySQL bằng người dùng root, tôi gặp lỗi:

LRI 1698 (28000): Truy cập bị từ chối cho người dùng 'root' @ 'localhost'

Sẽ không có vấn đề gì nếu tôi kết nối qua thiết bị đầu cuối (SSH), thông qua PHPMyAdmin hoặc Máy khách MySQL, ví dụ Navicat. Tất cả đều thất bại.

Tôi đã xem trong bảng mysql.user và nhận được những điều sau đây:

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

Như bạn có thể thấy, root nên có quyền truy cập.

Máy chủ khá đơn giản, vì tôi đã cố gắng khắc phục sự cố này một thời gian rồi ..

Nó đang chạy Ubuntu 16.04.1 LTS với Apache, MySQL và PHP, để nó có thể lưu trữ các trang web và iRedMail 0.9.5-1, để nó có thể lưu trữ thư.

Đăng nhập vào cơ sở dữ liệu MySQL hoạt động tốt trước khi tôi cài đặt iRedMail. Tôi cũng đã thử, chỉ cài đặt iRedMail, nhưng sau đó root, cũng không hoạt động ...

Nếu ai đó có thể cho tôi biết cách khắc phục sự cố đăng nhập MySQL của tôi hoặc cách tôi cài đặt iRedMail, trên cài đặt MySQL hiện có. Và vâng, tôi đã thử Mẹo cài đặt và tôi không thể tìm thấy các biến đó trong tệp cấu hình.


Tôi đã theo liên kết này và tùy chọn đầu tiên có hiệu quả với tôi: Askubfox.com/questions/763336/ Khăn
Mikael Arhelger

3
sudo mysql_secure_installationlà cách dễ nhất để khắc phục điều đó
Serge Ponomarev

Câu trả lời:


1120

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

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

$ sudo mysql -u root # I had to use "sudo" since is 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, rootngười dùng đang sử dụng auth_socketplugin

Có 2 cách để giải quyết điều này:

  1. Bạn có thể thiết lập người dùng root để sử dụng mysql_native_passwordplugin
  2. Bạn có thể tạo một cái mới db_uservới bạn system_user(được khuyến nghị)

Lựa chọn 1:

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

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

$ service mysql restart

Lựa chọn 2: (thay thế YOU_SYIUS_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 '';
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;

$ service mysql restart

Hãy nhớ rằng nếu bạn sử dụng tùy chọn # 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 bạn ( mysql -u YOUR_SYSTEM_USER)

Lưu ý: Trên một số hệ thống (ví dụ: phần mở rộng Debian) plugin 'auth_socket' được gọi ' 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';

Cập nhật: từ nhận xét của @ andy có vẻ như mysql 8.xx đã cập nhật / thay thế auth_socketcho caching_sha2_passwordtôi không có thiết lập hệ thống với mysql 8.xx để 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à 'cacheing_sha2_password'. 'Your_SYIUS_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 YOU_SYIUS_USER -p" và cung cấp mật khẩu cho người dùng này trên dấu nhắc. Không cần bước "CẬP NHẬT plugin người dùng". Đối với bản cập nhật plugin auth mặc định 8.0.4, hãy xem, https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/


5
Lựa chọn 1 làm việc cho tôi. Nhưng sau đó tôi cũng cần phải chạy sudo gedit /etc/phpmyadmin/config.inc.php. Sau đó, tôi đã tìm kiếm AllowNoPasswordvà bỏ sót cả hai dòng có chứa nó. Sau đó, tôi đã có thể đăng nhập bằng root mà không cần mật khẩu.
Joe

7
Phương án 2 hoạt động. Tôi nghĩ rằng nó luôn luôn là cách tốt nhất để tạo một người dùng mới và sử dụng để lại root ở đó!
PasinduJay

2
các IDENTIFIED BY ''chút có lẽ nên đượcIDENTIFIED BY 'YOUR_PASSWD'
YakovL

4
Cuối cùng, một câu trả lời thực sự hoạt động !! Có hàng trăm câu trả lời ngoài kia nói rằng mysqld_safe --skip-grant-tablesv.v., và nó không hoạt động.
Stewart

4
Ok, làm thế nào để làm điều này, nếu sudo mysql -u root -pkhông cho tôi vào?
Hrvoje T

173

Kiểm tra tại đây:

Phiên bản mới của MYSQL thực hiện theo cách này.

Trong my-sql mới nếu mật khẩu bị bỏ trống trong khi cài đặt thì nó dựa trên auth_socketplugin.

Cách chính xác là đăng nhập vào my-sql với sudođặc quyền.

$ sudo mysql -u root -p

Và sau đó cập nhật mật khẩu bằng cách sử dụng:

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

Một khi điều này được thực hiện stop and startmáy chủ mysql.

$  sudo service mysql stop
$  sudo service mysql start

Để biết chi tiết đầy đủ, bạn có thể tham khảo liên kết này .

Hãy bình luận cho bất kỳ nghi ngờ.


4
Điều này làm việc cho tôi bằng Ubuntu 18. Cảm ơn rất nhiều.
Peter Drinnan

10
Hoạt động tốt trên Ubuntu 18.04
sgtkuncoro

2
Chính xác những gì tôi đang tìm kiếm. Cảm ơn bạn :) Đã làm việc trên Ubuntu 18
Manthan_Admane

2
cái này hoạt động như một bùa mê,
Lubfox

3
Điều này hoạt động tốt. Các liên kết là hữu ích.
kjohri

9

Tôi gặp vấn đề này trên máy ảo Debian 8 mà tôi đang tương tác thông qua Putty trên máy tính để bàn Windows 10 của tôi.

Tôi đã thử các đề xuất khác nhau ở đây nhưng không có gì hiệu quả và tôi đang chạy MariaDB trên máy chủ Debian. Cuối cùng, tôi thấy rằng tôi không thể khởi động máy chủ db ở chế độ an toàn nhưng tôi không cần và các lệnh sau thực sự có hiệu quả đối với tôi tức là cho phép người dùng MySql mới được tạo đăng nhập vào máy chủ MySql / MariaDB:

sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service

Nếu cách trên không phù hợp với bạn, hãy làm theo các bước được nêu trong bài đăng của zetacu ở trên ( zetacu ), sau đó làm theo các bước của tôi.

Bây giờ bạn sẽ có thể sử dụng máy khách đầu cuối từ xa và đăng nhập an toàn vào mysql bằng lệnh:

mysql -u your_user_name -p

* nhập mật khẩu khi được nhắc


Thật đơn giản. Chà, chỉ có lệnh đầu tiên không được phép thực hiện lệnh thứ hai, vì vậy tôi sẽ điều chỉnh chỉnh sửa - vui lòng xem tôi có đúng không ...
kokbira

7

Tôi sẽ đề nghị loại bỏ kết nối Mysql -

CẬP NHẬT-Đây là phiên bản Mysql 5.5, nếu phiên bản của bạn khác, vui lòng thay đổi dòng đầu tiên cho phù hợp

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

Và cài đặt lại nhưng lần này tự đặt mật khẩu root. Điều này sẽ tiết kiệm rất nhiều nỗ lực.

sudo apt-get update
sudo apt-get install mysql-server

@ingernet có thể đó là do một số vấn đề khác mà bạn đã bỏ qua khi cài đặt lại
Eminem347

@PJBrunet có thể khiến phiên bản Mysql của bạn khác đi
Eminem347

Đủ công bằng, nhưng một giải pháp đa năng là tốt nhất.
PJ Brunet

6

Sau nhiều giờ vật lộn với không có giải pháp nào ở đây, điều này đã làm việc cho tôi sau đó tôi tìm thấy một video youtube nơi nó nói cột mật khẩu bây giờ được gọi là xác thực. Vì vậy, tôi đã có thể thay đổi mật khẩu của mình như sau: Đầu tiên hãy vào mysql từ terminal

sudo mysql

sau đó bên trong mysql gõ bất cứ điều gì sau mysql>

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

tại thời điểm này, bạn đã ra khỏi mysql trở lại vị trí đầu cuối bình thường của bạn. Bạn cần khởi động lại mysql để điều này có hiệu lực. cho loại đó như sau:

sudo service mysql restart

Tham khảo liên kết video này để hiểu rõ hơn


5

bước 1. sudo mysql -u root -p

bước 2. USE mysql;

bước 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

Đây là 'admin' là mật khẩu mới của bạn, bạn có thể thay đổi nó.

bước 4. exit

Cảm ơn. Bạn xong việc rồi.


5

Không cần sudo

Cơ sở dữ liệu được khởi tạo với 2 tài khoản đặc quyền: tài khoản đầu tiên là "root" không thể truy cập và tài khoản thứ hai có tên người dùng của bạn (kiểm tra bằng lệnh whoami).

Để cho phép truy cập vào tài khoản root, bạn cần đăng nhập bằng tên người dùng của mình

mysql -u $(whoami)

và tự thay đổi mật khẩu cho root

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

Đăng nhập với tư cách là 'root'

mysql -u root -p

Bạn là câu trả lời chính xác cho phiên bản thực tế của mysql, cảm ơn bạn!
Hugo S

3

Bước đầu tiên: đi tới /etc/phpmyadmin/config.inc.php sau đó bỏ dòng chú thích nơi bạn tìm thấy AllowNoPassword. Bước thứ hai: đăng nhập vào tài khoản mặc định mysql của bạn

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

và đó là tất cả!


3

Điều đó làm việc cho tôi:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3

Tôi cũng phải đối mặt với vấn đề tương tự lần đầu tiên.

Bây giờ nó đã được sửa:

Đầu tiên, bạn sao chép /etc/mysql/mysql.conf.d/mysqld.cnftập tin và quá khứ vào /etc/mysql/my.cnf.

Bạn có thể làm điều đó bằng lệnh:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

Bây giờ hãy để lại mật khẩu:

Sử dụng các lệnh sau trong thiết bị đầu cuối của bạn:

sudo service mysql stop 
sudo service mysql start
sudo mysql -u root

Bây giờ bạn đang ở trong bảng điều khiển mysql.

Sau đó, hãy viết một số truy vấn để thiết lập lại mật khẩu gốc của chúng tôi

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password"; 
flush privileges;
quit

Bây giờ chúng ta có thể làm sạch /etc/mysql/my.cng

Mở tệp trên trong trình chỉnh sửa của bạn và xóa toàn bộ dòng bên trong tệp.

Sau đó, hãy khởi động lại mysql:

sudo mysql service restart 

Bây giờ hãy sử dụng mysql với mật khẩu mới được tạo:

sudo mysql -u root -p

Cuối cùng nhập mật khẩu mới tạo của bạn.


1
Làm việc tốt ! nhưng câu trả lời của bạn cần được cập nhật !! /etc/mysql/my.cnf chứ không phải /etc/mysql/my.cng và cho dịch vụ khởi động lại dịch vụ sudo mysql của nó
essayoub

3

Tôi tìm thấy giải pháp của mình sau nhiều giờ nghiên cứu ở đây.

Dừng MySQL

sudo service mysql stop

Tạo thư mục dịch vụ MySQL.

sudo mkdir /var/run/mysqld

Cấp quyền cho người dùng MySQL để ghi vào thư mục dịch vụ.

sudo chown mysql: /var/run/mysqld

Bắt đầu MySQL thủ công, không cần kiểm tra quyền hoặc kết nối mạng.

sudo mysqld_safe --skip-grant-tables --skip-networking &

Đăng nhập mà không cần mật khẩu.

 mysql -uroot mysql

cập nhật mật khẩu

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

Tắt MySQL.

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

Bắt đầu dịch vụ MySQL bình thường.

sudo service mysql start

Điều này đã cho tôi một dấu nhắc mysql khi KHÔNG CÓ ELSE! Cảm ơn!
UserX

2

Bạn muốn truy cập MySQL với người dùng root nhưng bạn không cung cấp mật khẩu chính xác của root.

Nếu bạn cần đặt mật khẩu mới cho root , trang web của MySQL có tài liệu tuyệt vời về cách thực hiện: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

Tôi sẽ không hiển thị quy trình tại đâytài liệu MySql trên liên kết trên rõ ràng và súc tích .


Cảm ơn vì anwser, nhưng tôi không thể làm cho nó hoạt động được, vì vậy tôi đã chọn cài đặt iRedMail với cơ sở dữ liệu pgQuery thay thế.
Folkmann

Roger Folkman! Thật tốt khi biết rằng bạn đã giải quyết vấn đề của mình như thế nào.
Cristian Gonçalves

Liên kết bị phá vỡ. mysql.com đã có nhiều liên kết bị hỏng trong những năm qua. Bạn nên sao chép và dán các thông tin liên quan ở đây, điều này tốt miễn là bạn thuộc tính nguồn.
Ngỗng

1

hệ điều hành: Ubuntu18.04

mys: 5,7

  1. thêm skip-grant-tablesvào cuối tập tin của mysqld.cnf

  2. cp my.cnf

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
  1. đặt lại mật khẩu
(base)   ~ sudo service mysql stop 
(base)   ~ sudo service mysql start
(base)   ~ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed, 3 warnings
mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> update user set plugin="mysql_native_password"; 
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4  Changed: 0  Warnings: 0

mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
  1. loại bỏ skip-grant-tableskhỏi my.cnf
(base)   ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base)   ~ sudo emacs /etc/mysql/my.cnf                 
(base)   ~ sudo service mysql restart
  1. mở mysql
(base)   ~ mysql -uroot -ppassword 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  1. kiểm tra chính sách mật khẩu
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM                     |
+----------------------------+
1 row in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.08 sec)!
  1. thay đổi cấu hình của validate_password
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 3     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

lưu ý bạn nên biết rằng bạn gây ra lỗi gì? xác thực_password_policy?

bạn nên quyết định đặt lại mật khẩu để điền chính sách hoặc thay đổi chính sách.


0

Điều này đã xảy ra với tôi là tốt. Vấn đề là với repo mysql đã có sẵn với bản phân phối linux. Vì vậy, khi bạn chỉ cần làm: $ sudo apt install mysql-server nó cài đặt mysql từ repo mặc định của họ, điều này mang lại vấn đề này. Vì vậy, để khắc phục điều đó, bạn cần gỡ cài đặt mysql đã cài đặt $ sudo apt remove mysql* --purge --auto-remove

Sau đó tải xuống myso repo từ trang web chính thức của mysql MySQL APT Repo Thực hiện theo tài liệu của họ về cách thêm repo và cài đặt nó. Điều này không có vấn đề gì. Cũng như được trả lời bởi @zetacu, bạn có thể xác minh rằng gốc mysql thực sự sử dụng plugin mysql_native_password


0

trong trường hợp của tôi,

dev@Dev-007:~$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Tôi chắc chắn mật khẩu của mình là chính xác nếu không mã lỗi sẽ là ERROR 1045 (28000): Access denied for user

Vì vậy, tôi sử dụng sudo,

dev@Dev-007:~$ sudo mysql -u root -p

lần này nó làm việc cho tôi xem tài liệu

và sau đó thay đổi mật khẩu root,

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)

mysql> 

sau đó khởi động lại máy chủ bằng sudo /etc/init.d/mysql restart

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.