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

Quyền truy cập bị từ chối đối với người dùng 'test' @ 'ip' (sử dụng mật khẩu:CÓ)

"Quyền truy cập bị từ chối đối với người dùng 'test' @ 'ip' (sử dụng mật khẩu:YES)" là lỗi MySQL.

Điều này có nghĩa là ở cấp độ mạng mọi thứ đang hoạt động , vì bị từ chối quyền truy cập với tư cách là một người dùng nhất định , máy chủ phải hiểu người dùng mà bạn đang cố gắng kết nối với tư cách là . Vì vậy, mạng, tường lửa, định tuyến, v.v., tất cả đều phải hoạt động ; máy chủ phải đang lắng nghe, v.v.

Vấn đề nằm "đơn giản" ở xác thực .

Thử kết nối cục bộ với cơ sở dữ liệu (để ghi đè xác thực) và kiểm tra bảng đặc quyền:

USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';

và hãy nhớ rằng dòng bạn quan tâm là dòng đề cập đến IP (vì thông báo lỗi chỉ định IP không tên máy chủ - trong trường hợp đó, nó có thể là sự cố DNS; tên máy chủ là tên máy chủ mà máy chủ tin rằng bạn đến từ , không phải tên máy chủ mà bạn thực sự đến).

Đối sánh người dùng / máy chủ lưu trữ từ cụ thể hơn thành ít cụ thể hơn . Vì vậy, nếu bạn đã có:

user      host     password
test      1.2.3.4  foo

và chạy,

GRANT... TO [email protected]'%' ... PASSWORD bar

... khoản trợ cấp này sẽ hoạt động ở mọi nơi ngoại trừ 1.2.3.4, nơi mật khẩu sẽ vẫn là 'foo'.

Từ sách hướng dẫn (liên kết ở trên):

Bạn có thể bị buộc phải làm

USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

để đảm bảo rằng không có dòng giả nào trong bảng tài trợ đề cập đến 'bài kiểm tra' của người dùng.

(Tôi nghĩ cũng nên GRANT,

GRANT ALL PRIVILEGES ON databasename.*

)

Nghi ngờ bảo mật (không liên quan đến câu trả lời)

Hướng dẫn trên cho biết: Tính cụ thể của địa chỉ IP theo nghĩa đen không bị ảnh hưởng bởi việc nó có mặt nạ mạng hay không, vì vậy 192.168.1.13 và 192.168.1.0/255.255.255.0 được coi là cụ thể như nhau .

Bây giờ chỉ cần nhìn sơ qua 127.0.0.1/0.0.0.0 có vẻ rất cụ thể (và vô hại) cho localhost . Mặt nạ mạng, nếu tôi không nhầm, đảm bảo rằng nó tương đương với % , ngoại trừ việc nó cực kỳ cụ thể và sẽ chạy trước . Do đó

test     bar         %           
test     localfoo    127.0.0.1/0.0.0.0

có nghĩa là mật khẩu cho test từ mọi nơi, nó không phải là "bar", mà là "localfoo".

Không ai có thể nhầm lẫn một khoản trợ cấp như vậy, nhưng có một sự nhầm lẫn và nhầm lẫn .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL TEXT so với BLOB và CLOB

  2. Cách nhanh nhất để kết xuất đối tượng từ điển Python (dict) vào một bảng MySQL?

  3. Doctrine không tồn tại thực thể với các giá trị boolean và PDO ::ATTR_EMULATE_PREPARES =false trong Mysql

  4. Tạo MySQL View bằng UNION

  5. Lợi ích lớn nhất của việc sử dụng INDEXES trong mysql là gì?