Truy cập bị từ chối cho người dùng 'root' @ '%'


29

Tôi đã sử dụng để truy cập người dùng root trong MySQL tốt. Nhưng gần đây, tôi không còn có thể.

Tôi có thể đăng nhập tốt:

 mysql -u root -p

Đây là trạng thái mysql sau khi đăng nhập:

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2

Connection id:      37
Current database:   
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.5.28-0ubuntu0.12.04.3 (Ubuntu)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:         4 min 16 sec

Threads: 1  Questions: 112  Slow queries: 0  Opens: 191  
Flush tables: 1  Open tables:  6  Queries per second avg: 0.437
--------------

Nhưng khi tôi muốn thực hiện bất kỳ hành động nào, chẳng hạn như:

mysql> CREATE DATABASE moyennegenerale;
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'moyennegenerale'

Tôi hiểu %được sử dụng để biểu thị bất kỳ máy chủ lưu trữ nào, nhưng trạng thái của tôi nêu rõ localhost. Có ai đó có một ý tưởng về những gì có thể xảy ra?

Câu trả lời:


17

Tôi nghĩ bạn có người dùng ẩn danh

Hãy thử chạy nó:

SELECT user,host,password FROM mysql.user WHERE user='';

Điều này sẽ cho thấy những gì người dùng ẩn danh tồn tại. Nhiều khả năng, bạn sẽ thấy một dòng có người dùng trống, máy chủ lưu trữ %và mật khẩu trống như dưới đây:

mysql> select user,host,password from mysql.user;
+-----------+-------------+-------------------------------------------+
| user      | host        | password                                  |
+-----------+-------------+-------------------------------------------+
| lwdba     | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | %           | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| vanilla   | localhost   |                                           |
| mywife    | %           |                                           |
|           | %           |                                           | <<<--- LOOK !!!
| replicant | 10.64.113.% | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| kumar     | %           |                                           |
+-----------+-------------+-------------------------------------------+

Vì vậy, làm thế nào bạn đăng nhập? Chạy truy vấn này:

SELECT USER(),CURRENT_USER();

Thứ này nói lên điều gì?

  • USER () báo cáo cách bạn đã cố xác thực trong MySQL
  • CURRENT_USER () báo cáo cách bạn được phép xác thực trong MySQL

Chức năng thứ hai CURRENT_USER()tiết lộ cách mà người dùng vô danh được sử dụng để đăng nhập.

Bạn đã có những đặc quyền gì khi đăng nhập?

Hãy chạy

SHOW GRANTS;

Điều này sẽ tiết lộ những đặc quyền bạn có tại thời điểm bạn đăng nhập. Thực tế là bạn đã bị chặn tạo cơ sở dữ liệu cho thấy bạn không phải là root mà là một số người dùng có đặc quyền thấp hơn.

Vui lòng làm sạch tài trợ người dùng của bạn.

Để đặt lại mật khẩu gốc, vui lòng thực hiện như sau:

echo "SET PASSWORD FOR root@localhost=PASSWORD('password');" > /var/lib/mysql/rootpwd.sql
service mysql restart
rm -f /var/lib/mysql/rootpwd.sql

Tôi đã học được phương pháp hiệu quả này từ @ShlomiNoach .

Hãy thử một lần !!!


10

Tôi biết những gì bạn đã làm.

Làm cái này:

SELECT `User`, `Grant_priv` FROM `mysql`.`user` WHERE `User` = 'root';

Bạn có thể sẽ nhận thấy nó trả về 'N' cho Grant_priv. Vì vậy, làm điều này:

UPDATE `mysql`.`user` SET `Grant_priv` = 'Y' WHERE `User` = 'root';
FLUSH PRIVILEGES;
SELECT `User`, `Grant_priv` FROM `mysql`.`user`;

Và walla! Mong rằng sẽ giúp.


Ngoài ra, vì lý do bảo mật, bạn phải luôn xóa người dùng root sau khi tạo một dba mới .. chỉ cần đảm bảo rằng họ TỐT HƠN TẤT CẢ CÁC QUYỀN RIÊNG TƯ khi kết thúc VỚI GRANT OPTION .. bit đó rất quan trọng.
Kevin Florida

Điều này, kết hợp với việc đóng và mở lại kết nối (trong trường hợp của tôi từ HeidiQuery) đã thực hiện thủ thuật này!
xorinzor

4

Sau khi bạn nhập khi rootngười dùng kiểm tra các đặc quyền của bạn:

 mysql> show grants for 'root'@'localhost';

Sau khi kiểm tra các đặc quyền của bạn, bạn có thể thử cung cấp cho người dùng khác tất cả các đặc quyền hoặc bạn có thể thử cung cấp lại cho rootngười dùng tất cả các đặc quyền:

 mysql> grant all privileges on *.* to 'root'@'localhost';

Nếu rootngười dùng của bạn không có đặc quyền, bạn có thể thử khôi phục chúng, vì vậy:

Dừng mysqldmáy chủ

Khởi động lại máy chủ theo cách này mysqld_safe --skip-grant-table

Khôi phục rootđặc quyền với:

 mysql> flush privileges;
 mysql> grant all privileges on *.* to 'root'@'localhost' with grant option;

Đây là những gì tôi nhận được sau khi chương trình cấp cho lệnh 'root' @ 'localhost': ERROR 1141 (42000): Không có khoản trợ cấp nào được xác định cho người dùng 'root' trên máy chủ 'localhost'

Đầu ra của lệnh thứ hai là gì?

2
Có một cách "tốt hơn" để làm điều này trong Debian, nơi bạn không cần phải khởi động lại máy chủ. Chỉ cần rootkết nối như debian-sys-maint@localhostvà sử dụng mật khẩu trong /etc/mysql/debian.cnf. Người dùng đó có TẤT CẢ các đặc quyền trong MySQL. Điều tốt là bạn không cần phải khởi động lại máy chủ của mình.
Anders

Thử đi. sudo mysql --defaults-file = / etc / mysql / debian.cnf
Anders

0

Đặc quyền của bạn có thể bị giảm?

Ngoài ra, bạn có thể thử tạo một tài khoản khác với quyền root.

Và xóa người dùng root và tạo lại với các đặc quyền được chỉ định.

Điều này có thể hữu ích: http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html

C.5.4.1.2 - LINUX (Tạo tệp với truy vấn người tạo, người dùng mới có quyền root đầy đủ)

C.5.4.1.1 - Windows (Tạo tệp với truy vấn người tạo, người dùng mới có đặc quyền gốc đầy đủ)

Truy vấn: (Tạo người dùng root)

  CREATE USER 'new_root'@'%' IDENTIFIED BY '***';
  GRANT ALL PRIVILEGES ON *.* TO 'new_root'@'%' IDENTIFIED BY '***' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

Hướng dẫn sử dụng MySQL Tạo người dùng: http://dev.mysql.com/doc/refman/5.5/en/adding-users.html

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.