Quyền truy cập bị Từ chối cho Người dùng 'root' @ 'localhost' (sử dụng mật khẩu: CÓ) - Không có Đặc quyền?


110

Tôi liên tục nhận được lỗi này.

Tôi đang sử dụng MySQL Workbench và từ những gì tôi tìm thấy là đặc quyền lược đồ của root là vô hiệu. Không có đặc quyền nào cả.

Tôi đang gặp sự cố trên các nền tảng mà máy chủ của tôi được sử dụng và đây hoàn toàn là sự cố đột ngột.

root@127.0.0.1 rõ ràng có rất nhiều quyền truy cập nhưng tôi đã đăng nhập như vậy, nhưng dù sao nó cũng chỉ gán cho localhost - localhost không có đặc quyền.

Tôi đã làm một vài điều như FLUSH HOSTS, FLUSH PRIVILEGES, vv nhưng đã không tìm thấy thành công từ đó hoặc internet.

Làm cách nào để lấy lại quyền truy cập root của nó? Tôi thấy điều này thật bực bội vì khi tôi nhìn xung quanh, mọi người mong đợi bạn "có quyền truy cập" nhưng tôi không có quyền truy cập nên tôi không thể truy cập vào dòng lệnh hoặc bất cứ điều gì và GRANTbản thân tôi bất cứ điều gì.

Khi chạy SHOW GRANTS FOR rootđây là những gì tôi nhận được đổi lại:

Mã lỗi: 1141. Không có tài trợ nào như vậy được xác định cho người dùng 'root' trên máy chủ '%'


Chạy SHOW GRANTS FOR roottrong một truy vấn, đăng kết quả trong câu hỏi của bạn.
NobleUplift,

Bạn đang cố gắng truy cập cơ sở dữ liệu từ máy chủ cục bộ hoặc từ máy chủ lưu trữ khác bằng MySQL Workbench?
Andy Jones,

máy chủ khởi động lại với --skip-cấp-bàn và đăng nhập với bất kỳ người sử dụng và cung cấp đặc quyền đầy đủ để rễ và máy chủ khởi động lại một lần nữa mà không có tùy chọn ở trên
vidyadhar

@AndyJones không, nó nằm trên một máy chủ chuyên dụng mà tôi đang sử dụng.
Đuổi theo

@vidyadhar Tôi xin lỗi, tôi không chắc mình sẽ làm điều đó ở đâu?
Đuổi theo

Câu trả lời:


51

Sử dụng hướng dẫn để đặt lại mật khẩu gốc - nhưng thay vì đặt lại mật khẩu gốc, chúng tôi sẽ CHÈN mạnh mẽ một bản ghi vào bảng mysql.user

Trong tệp init, hãy sử dụng cái này thay thế

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;

1
Tôi xin lỗi Andy, nhưng khi tôi đến bước 6, tôi tiếp tục gặp vấn đề. Vì tôi đã sử dụng trình hướng dẫn cài đặt, tôi sẽ sử dụng "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt Mọi thứ ở nơi nó được cho là và những gì bạn có ở trên tôi đã đưa vào tệp cho phù hợp. Tôi cũng đã dừng dịch vụ. Tôi chỉ nhận được đầu ra này: prntscr.com/1ilxau Và mọi thứ (plugin) tắt. Thực sự khó hiểu.
Đuổi theo

2
bạn đang điều hành cái này với tư cách là quản trị viên?
Andy Jones,

1
Trước sự ngạc nhiên ngu ngốc của tôi, tôi đã không. Sau khi tôi làm, tôi nhận được prntscr.com/1imcnj này - Lần đầu tiên tôi làm điều đó trên dòng của riêng họ (từ dán) sau đó tôi đặt tất cả trên một dòng. Tôi xin lỗi vì điều này chỉ khiến tôi bối rối, không phải chuyên gia sql.
Đuổi theo

16
nó đưa ra: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'lỗi. @AndyJones
alper

1
Tôi nhận được: Unknown cột 'Mật khẩu' trong 'danh sách trường'
ruj sricheta

128

Nếu bạn gặp vấn đề tương tự trong MySql 5.7. +:

Access denied for user 'root'@'localhost'

đó là vì MySql 5.7 theo mặc định cho phép kết nối với socket, nghĩa là bạn chỉ cần kết nối với sudo mysql. Nếu bạn chạy sql:

SELECT user,authentication_string,plugin,host FROM mysql.user;

thì bạn sẽ thấy nó:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Để cho phép kết nối với root và mật khẩu, sau đó cập nhật các giá trị trong bảng bằng lệnh:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Current-Root-Password';
FLUSH PRIVILEGES;

Sau đó chạy lại lệnh select và bạn sẽ thấy nó đã thay đổi:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *2F2377C1BC54BE827DC8A4EE051CBD57490FB8C6 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Và đó là nó. Bạn có thể chạy quá trình này sau khi chạy và hoàn thành sudo mysql_secure_installationlệnh.

Đối với mariadb, sử dụng

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('manager');

để đặt mật khẩu. Thêm tại https://mariadb.com/kb/en/set-password/


1
Thực sự cám ơn khi kết nối thành lập trong bạc hà linux
Lova Chittumuri

Đang cập nhật từ auth_socketđể mysql_native_passwordkhắc phục sự cố của tôi. Cảm ơn bạn!
olore

1
Điều này hoàn toàn tức giận khi cố gắng tìm ra và lãng phí thời gian. Tôi ước họ hỏi điều này trong suốt mysql_secure_installation. Cảm ơn bạn rất nhiều vì câu trả lời này.
PatPeter

điều này cũng hữu ích stackoverflow.com/questions/2995054/…
Abeer Sul

42

Nó không thích đặc quyền người dùng của tôi vì vậy tôi SUDO nó. (trong bash << sudo đặt người dùng và mật khẩu) (điều này cung cấp tên người dùng của root và đặt mật khẩu thành không có gì) (Trên Mac)

sudo mysql -uroot -p

27

Hãy thử các lệnh sau

~$ sudo /etc/init.d/mysql stop
~$ sudo mysqld_safe --skip-grant-tables &
~$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

mysql> use mysql;

mysql> update user set password=PASSWORD("root") where User='root';

mysql> flush privileges;

mysql> quit

~$ sudo /etc/init.d/mysql stop

Stopping MySQL database server: mysqld

STOPPING server from pid file /var/run/mysqld/mysqld.pid

mysqld_safe[6186]: ended

[1]+  Done                    mysqld_safe --skip-grant-tables

~$ sudo /etc/init.d/mysql start

~$ mysql -u root -p

* MySQL Community Server 5.6.35 is started
~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, 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> 

11
Trong MySQL 5.7, trường mật khẩu trong trường bảng mysql.user đã bị xóa, bây giờ tên trường là 'verify_string'.
Tin đồn

đối với phiên bản mới hơn của mysql, họ đã thay đổi tên cột mật khẩu là authentic_string
Ramesh Maharjan

sudo mysqld_safeđã cho tôi cái này /var/run/mysqld for UNIX socket file don't exists, sau đó mkdir -p /var/run/mysqldsudo chown -R mysql:mysql /var/run/mysqld/nó hoạt động và khởi động daemon.
kenzotenma 17/02/19

1
LỖI 2002 (HY000): Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/var/run/mysqld/mysqld.so
Mostafa

19

cho những người đang gặp phải lỗi dưới đây trong phiên bản mysql 5.7+ -

Access denied for user 'root'@'localhost' (using password: YES)
  1. Mở thiết bị đầu cuối mới

  2. sudo /etc/init.d/mysql stop ... Máy chủ cộng đồng MySQL 5.7.8-rc bị dừng

  3. sudo mysqld_safe --skip-grant-tables & điều này sẽ bỏ qua tất cả các đặc quyền cấp và khởi động mysql ở chế độ an toàn Đôi khi quá trình bị kẹt chỉ vì

grep: lỗi ghi: Đường ống bị hỏng 180102 11:32:28 mysqld_safe Đăng nhập vào '/var/log/mysql/error.log'.

Chỉ cần nhấn Ctrl + Z hoặc Ctrl + C để ngắt và thoát quá trình

  1. mysql -u root

Chào mừng bạn đến với màn hình MySQL. Các lệnh kết thúc bằng; hoặc \ g. Id kết nối MySQL của bạn là 2 Phiên bản máy chủ: 5.7.8-rc Máy chủ cộng đồng MySQL (GPL)

Bản quyền (c) 2000, 2015, Oracle và / hoặc các chi nhánh của nó. Đã đăng ký Bản quyền.

Oracle là nhãn hiệu đã đăng ký của Oracle Corporation và / hoặc các chi nhánh của nó. Những tên khác có thể là thương hiệu của chủ sở hữu tương ứng.

Gõ 'help;' hoặc '\ h' để được trợ giúp. Gõ '\ c' để xóa câu lệnh nhập hiện tại.

  1. mysql> use mysql;

Đọc thông tin bảng để hoàn thành tên bảng và cột Bạn có thể tắt tính năng này để khởi động nhanh hơn với -A

Cơ sở dữ liệu đã thay đổi

  1. mysql> update user set authentication_string=password('password') where user='root'; Truy vấn OK, 4 hàng bị ảnh hưởng, 1 cảnh báo (0,03 giây) Các hàng phù hợp: 4 Đã thay đổi: 4 Cảnh báo: 1

  2. mysql> flush privileges; Truy vấn OK, 0 hàng bị ảnh hưởng (0,00 giây)

  3. mysql> quit Tạm biệt

  4. sudo /etc/init.d/mysql stop

..180102 11:37:12 mysqld_safe mysqld từ tệp pid /var/run/mysqld/mysqld.pid đã kết thúc. * MySQL Community Server 5.7.8-rc bị dừng arif @ ubuntu: ~ $ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc được khởi động

  1. mysql -u root -p

    Nhập mật khẩu:

    Chào mừng bạn đến với màn hình MySQL. Các lệnh kết thúc bằng; hoặc \ g. Id kết nối MySQL của bạn là 2 Phiên bản máy chủ: 5.7.8-rc Máy chủ cộng đồng MySQL (GPL)

sau phiên bản mysql 5.7+, mật khẩu cột được thay thế bằng tênhentication_string từ bảng mysql.user.

hy vọng những bước này sẽ giúp bất cứ ai, cảm ơn.


15

Tôi đang sử dụng ubuntu 18 và chỉ cần cài đặt MySQL (password: root) bằng các lệnh sau.

sudo apt install mysql-server
sudo mysql_secure_installation

Khi tôi cố gắng đăng nhập bằng người dùng ubuntu bình thường, nó đã khiến tôi gặp sự cố này.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Nhưng tôi đã có thể đăng nhập vào MySQL thông qua siêu người dùng. Sử dụng các lệnh sau, tôi đã có thể đăng nhập thông qua người dùng bình thường.

sudo mysql    
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
exit;

Sau đó, bạn sẽ có thể đăng nhập vào Mysql bằng tài khoản bình thường.

nhập mô tả hình ảnh ở đây



5

Nếu bạn gặp lỗi này trong Workbench nhưng bạn có thể đăng nhập từ thiết bị đầu cuối, hãy làm theo các bước sau.

Đầu tiên chỉ cần đăng nhập bằng mật khẩu hiện tại của bạn:

sudo mysql -u root -p

Sau đó, thay đổi mật khẩu của bạn vì mật khẩu có độ mạnh thấp đôi khi gây ra lỗi.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;

Sau đó, chỉ cần thoát và đăng nhập lại bằng mật khẩu mới của bạn:

quit

sudo mysql -u root -p

Sau khi bạn đăng nhập thành công, hãy nhập lệnh:

use mysql;

Nó sẽ hiển thị một thông báo như 'Cơ sở dữ liệu đã thay đổi', sau đó nhập:

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

Sau loại đó:

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';

Sau đó gõ:

FLUSH PRIVILEGES;

Sau đó, chỉ cần thoát:

quit

Bây giờ hãy thử đăng nhập bằng mật khẩu mới trong WORKBENCH của bạn. Hy vọng nó sẽ hoạt động. Cảm ơn bạn.


4

Tôi gặp sự cố này khi cài đặt Testlink trên máy chủ Ubuntu, tôi đã làm theo các bước sau

mysql -u root
use mysql;
update user set password=PASSWORD("root") where User='root';
flush privileges;
quit

Bây giờ dừng phiên bản và bắt đầu lại, tức là

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

2

Cách dễ nhất để đặt lại mật khẩu gốc là:

  • khởi động lại tùy chọn mysqld --skip-Grant -boards . Điều này cho phép bất kỳ ai kết nối mà không cần mật khẩu và có tất cả các đặc quyền. Vì điều này không an toàn, bạn có thể muốn sử dụng --skip-Grant-table kết hợp với --skip-networking để ngăn các máy khách từ xa kết nối.

  • Kết nối với máy chủ mysqld bằng lệnh này:

  • shell> mysql Phát hành các câu lệnh sau trong máy khách mysql. Thay thế mật khẩu bằng mật khẩu mà bạn muốn sử dụng.

  • mysql> CẬP NHẬT mysql.user SET Password = PASSWORD ('MyNewPass') -> WHERE User = 'root'; mysql> QUYỀN RIÊNG TƯ CỦA FLUSH;

  • Dừng máy chủ, sau đó khởi động lại bình thường (không có tùy chọn --skip-cấp-bảng và --skip-mạng).

Nguồn tài liệu Mysql và kinh nghiệm cá nhân:

http://dev.mysql.com/doc/refman/5.6/en/resetting-permissions.html



0

Hãy thử các bước sau để khắc phục sự cố này:

  1. Mở terminal / command prompt và điều hướng đến thư mục bin của thư mục cài đặt MySQL. Sau đó chạy lệnh mysqld --console.
  2. Nếu bạn có thể thấy dòng đó 171010 14:58:22 [Note] --secure-file-privđược đặt thành NULL. Các thao tác liên quan đến nhập và xuất dữ liệu bị vô hiệu hóa sau khi thực hiện lệnh trên từ dấu nhắc lệnh.
  3. Sau đó, bạn cần kiểm tra xem mysqldcó bị chặn bởi Tường lửa của Windows hoặc chương trình khác hay không.
  4. Nếu nó bị Tường lửa Windows chặn thì cần phải bỏ chặn khỏi nó và lưu cài đặt.
  5. Để bỏ chặn mysqldhoặc mysqlứng dụng, hãy làm theo các bước sau:
    1. Đi tới dấu nhắc lệnh và nhập wf.mscđể mở cài đặt tường lửa.
    2. Nhấp vào Cho phép ứng dụng hoặc tính năng thông qua Tường lửa của Windows.
    3. Chọn mysqldhoặc các mysqldphiên bản có sẵn trong danh sách và chọn hộp kiểm cho miền, công khai và riêng tư và lưu cài đặt.
  6. Quay lại thư mục bin và thử lại lệnh từ bước 1.
  7. Nó sẽ hoạt động tốt và không hiển thị bất kỳ lỗi nào.

Có thể chạy bảng điều khiển MySQL mà không gặp bất kỳ sự cố nào ngay bây giờ!


0

Tôi đã giải quyết vấn đề tương tự bằng cách sử dụng sql tiếp theo và khởi động lại máy chủ MySQL:

update mysql.user set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y'
where user='root';

0

Tôi đã làm việc với Quyền truy cập bị Từ chối cho Người dùng 'root' @ 'localhost' (sử dụng mật khẩu: CÓ) trong vài giờ, tôi đã tìm thấy giải pháp sau,

The answer to this problem was that in the my.cnf located within
/etc/mysql/my.cnf

the line was either 
bind-address = 127.0.0.1 
            (or)
bind-address = localhost
            (or)
bind-address = 0.0.0.0

I should prefer that 127.0.0.1

I should also prefer 0.0.0.0, it is more flexible 
because which will allow all connections

0

Tôi không nghĩ rằng bạn phải thoát khỏi --init-filetham số:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt

Nên là:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\mysql-init.txt


0

đối với vấn đề trên, mật khẩu của bạn trong hệ thống phải khớp với mật khẩu mà bạn đã nhập trong chương trình vì khi bạn chạy chương trình, nó sẽ kiểm tra mật khẩu của hệ thống vì bạn đã cấp quyền root với tư cách là người dùng nên tạo ra lỗi cho bạn và đồng thời ghi không bị xóa khỏi cơ sở dữ liệu.

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
class Delete
{
    public static void main(String []k)
    {
        String url="jdbc:mysql://localhost:3306/student";

        String user="root";
        String pass="jacob234";
        try
        {
            Connection myConnection=DriverManager.getConnection(url,user,pass);
            Statement myStatement=myConnection.createStatement();
            String deleteQuery="delete from students where id=2";
            myStatement.executeUpdate(deleteQuery);
            System.out.println("delete completed");
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

Giữ mật khẩu hệ thống của bạn dưới dạng jacob234 và sau đó chạy mã.


0

Tôi đã giải quyết vấn đề tương tự bằng cách chạy Workbench với tư cách quản trị viên.

... Tôi đoán đó là do các hạn chế đối với máy tính của công ty, trong trường hợp của tôi ...


0

Với tôi, vấn đề tương tự, nhưng nguyên nhân là do tôi đang sử dụng máy chủ mysql trên 32 (bit) và bàn làm việc đang chạy trên phiên bản 64 (bit). máy chủ và bàn làm việc cần phải có cùng một phiên bản.

xpress


0

Đối với tôi, tôi đang sử dụng MYSQLWorkbench và cổng là 3306 MAMP sử dụng 8889


0

Tôi cũng gặp phải vấn đề tương tự khi cố gắng kết nối cơ sở dữ liệu Mysql bằng ứng dụng Laravel. Tôi muốn giới thiệu vui lòng kiểm tra mật khẩu cho người dùng. Mật khẩu MySQL không được có các ký tự đặc biệt như # , & , v.v.


Trên bluehost, việc xóa các ký tự đặc biệt khỏi mật khẩu đã thực sự khắc phục được sự cố.
Mena
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.