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


100

Tôi đang gặp sự cố với người dùng mysql không phải root / admin, tôi đang làm theo các bước dưới đây để tạo người dùng và các đặc quyền của nó, hãy sửa cho tôi nếu tôi làm sai,

tôi đang cài đặt mysqltrên RHEL 5.7 64bit, các gói được đề cập dưới đây, một lần tôi thực hiện việc rpm installchúng tôi

  1. tạo db mysql bằng cách sử dụng mysql_install_db, sau đó
  2. bắt đầu dịch vụ mysql sau đó
  3. sử dụng mysql_upgradechúng tôi cũng đang làm với máy chủ.

Sau quá trình này, tôi có thể đăng nhập với tư cách là rootngười dùng không phải root, tôi không thể đăng nhập vào máy chủ:

[root@clustertest3 ~]# rpm -qa | grep MySQL
MySQL-client-advanced-5.5.21-1.rhel5
MySQL-server-advanced-5.5.21-1.rhel5


[root@clustertest3 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[root@clustertest3 ~]# ls -ld /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Nov  30 11:09 /var/lib/mysql/mysql.sock

mysql> CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)

[root@clustertest3 ~]# mysql -ugolden -p
Enter password:
ERROR 1045 (28000): Access denied for user 'golden'@'localhost' (using password: YES)

Đây là vấn đề tôi đang gặp phải, có giải pháp nào cho vấn đề này không?


Bạn có thể đăng nhập bằng root và sau đó làmSELECT * FROM mysql.user
Noam Rathaus

1
Chấp nhận câu trả lời phù hợp với bạn để những người dùng khác biết cách bạn đã giải quyết vấn đề của mình.
Người dùng không phải là người dùng

Câu trả lời:


59

Không cấp tất cả các đặc quyền trên tất cả cơ sở dữ liệu cho người dùng không phải root, nó không an toàn (và bạn đã có "root" với vai trò đó)

GRANT <privileges> ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Câu lệnh này tạo một người dùng mới và cấp các đặc quyền đã chọn cho nó. I E:

GRANT INSERT, SELECT, DELETE, UPDATE ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Hãy xem tài liệu để xem chi tiết tất cả các đặc quyền

CHỈNH SỬA: bạn có thể tìm thêm thông tin với truy vấn này (đăng nhập bằng "root"):

select Host, User from mysql.user;

Để xem những gì đã xảy ra


Tôi không đồng ý với tuyên bố đó về root. Có, bạn không nên cung cấp cho các đặc quyền một cách hoàn toàn không. Tuy nhiên, bạn cũng không nên sử dụng các tài khoản dùng chung vì bạn không có dấu vết kiểm tra thích hợp trong DB. Nếu bạn phải có các tài khoản được chia sẻ chẳng hạn như root, bạn cần có những thứ khác được bao bọc xung quanh nó để đảm bảo dấu vết kiểm tra còn nguyên vẹn.
krad

36

Nếu bạn đang kết nối với MySQL bằng máy từ xa (Bàn làm việc ví dụ), v.v., hãy sử dụng các bước sau để loại bỏ lỗi này trên hệ điều hành nơi MySQL được cài đặt

mysql -u root -p

CREATE USER '<<username>>'@'%%' IDENTIFIED BY '<<password>>';
GRANT ALL PRIVILEGES ON * . * TO '<<username>>'@'%%';
FLUSH PRIVILEGES;

Hãy thử đăng nhập vào phiên bản MYSQL.
Điều này đã làm việc để tôi loại bỏ lỗi này.


1
Thậm chí điều đó không hoạt động, vì nó nhắc lỗi ngay cả khi chạy "mysql -u root -p"
Marian Klühspies

25

Thử:

CREATE USER 'golden'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'localhost';
FLUSH PRIVILEGES;

Hoặc thậm chí sử dụng tốt hơn: mysql_setpermissionđể tạo người dùng


1
Điều này không giải quyết được vấn đề. TẠO NGƯỜI DÙNG 'goldy' @ '%' ĐƯỢC XÁC NHẬN BỞI 'some_pass'; là một truy vấn hợp lệ
pratim_b

Vì lý do nào đó của anh ta %mà sẽ hoạt động cho tất cả các máy chủ, không giải quyết được nó. Vì vậy, bằng cách chỉ định localhostnó sẽ hoạt động. Nếu đó là công việc doesnt, một cái gì đó là tắt trong mysql
Noam Rathaus

13

Có vẻ như bạn đang cố gắng tạo ra một người dùng 'vàng' @ '%' nhưng một người dùng khác có tên 'vàng' @ 'localhost' đang cản trở / được ưu tiên.

Thực hiện lệnh này để xem những người dùng:

SELECT user,host FROM mysql.user;

Bạn sẽ thấy hai mục:

1) người dùng = vàng, máy chủ =%

2) user = gold, host = localhost

Thực hiện các lệnh sau:

DROP User 'golden'@'localhost';
DROP User 'golden'@'%';

Khởi động lại MySQL Workbench.

Sau đó, thực hiện lại các lệnh ban đầu của bạn:

CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';

Sau đó, khi bạn cố gắng đăng nhập vào MySQL, hãy nhập nó vào như sau:

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

Nhấn 'Kiểm tra kết nối' và nhập 'mật khẩu' của bạn.


2
Đây là giải pháp duy nhất mà tôi tìm thấy ở đây có một số ý nghĩa. Cảm ơn ông tốt.
Sumuk Shashidhar

8

Đầu tiên, tôi tạo người dùng bằng:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

Sau khi Googling và thấy điều này , tôi đã cập nhật mật khẩu của người dùng bằng:

SET PASSWORD FOR 'user'@'localhost' = PASSWORD('password_txt');

và tôi có thể kết nối sau đó.


3

Đối với bất kỳ ai khác đã làm tất cả các lời khuyên nhưng vấn đề vẫn tồn tại.

Kiểm tra quy trình được lưu trữ và xem CÁC ĐỊNH NGHĨA. Những bộ định nghĩa đó có thể không còn tồn tại.

Sự cố của tôi xuất hiện khi chúng tôi thay đổi máy chủ ký tự đại diện (%) thành IP cụ thể, giúp cơ sở dữ liệu an toàn hơn. Rất tiếc, có một số chế độ xem vẫn đang sử dụng 'user' @ '%' mặc dù về mặt kỹ thuật 'user' @ '172 ....' là đúng.


Cảm ơn vì đã đưa tôi đi đúng hướng. Tôi thậm chí còn không biết về cài đặt Bảo mật SQL trên các chế độ xem và các thủ tục được lưu trữ. Tôi đã kết thúc việc thiết lập Bảo mật SQL cho Invoker trên các chế độ xem của mình để nó sử dụng quyền của người dùng thực thi lệnh thay vì người dùng tạo chế độ xem. Đây là một liên kết để tham khảo: dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
Justin

2

Tôi cũng gặp vấn đề tương tự và sau đó tôi phát hiện ra đó là do tôi đã thay đổi tên máy chủ của mình (không phải localhost).

Do đó, tôi giải quyết nó bằng cách chỉ định --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1

2

Đảm bảo rằng người dùng có mục nhập localhost trong bảng người dùng. Đó là vấn đề tôi đang gặp phải. VÍ DỤ:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

1

Theo cách bạn tạo người dùng của mình, MySQL diễn giải theo cách khác. Ví dụ: nếu bạn tạo một người dùng như thế này:

create user user01 identified by 'test01';

MySQL hy vọng bạn cung cấp một số đặc quyền bằng cách sử dụng grant all on <your_db>.* to user01;

Đừng quên flush privileges;

Tuy nhiên, nếu bạn tạo người dùng như vậy (bằng cách chuyển địa chỉ IP), bạn phải thay đổi nó thành:

create user 'user02'@'localhost' identified by 'teste02';

vì vậy, để cung cấp một số đặc quyền, bạn phải làm điều đó:

grant all on <your_db>.* to user02@localhost;
flush privileges;

0

Trong trường hợp của tôi, lỗi tương tự cũng xảy ra vì tôi đang cố gắng sử dụng mysql bằng cách chỉ nhập "mysql" thay vì "mysql -u root -p"


0

kết nối máy chủ của bạn từ mysqlworkbench và chạy lệnh này-> ALTER USER 'root' @ 'localhost' ĐƯỢC XÁC ĐỊNH BỞI 'yourpassword';


0

Đối với việc tìm kiếm gây phiền nhiễu đến đây sau khi tìm kiếm thông báo lỗi này:

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

Vấn đề đối với tôi là không đặt mật khẩu trong dấu ngoặc kép. ví dụ. Tôi cần sử dụng -p'password'thay vì-ppassword


-8

Chỉ cần thêm tên máy tính thay vì 'localhost' trong tên máy chủ hoặc địa chỉ Máy chủ MySQL.

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.