2011-01-27 36 views
7

Tôi vừa cài đặt máy chủ Cộng đồng MySQL (5.5.8) trên Mac OS X 10.6.6.MySQL dường như DROP USER; nhưng người dùng vẫn tồn tại trong bảng mysql.users

Tôi đã làm theo các quy tắc cho một cài đặt (gán mật khẩu để nhổ tận gốc, xóa các tài khoản nặc danh, vv) an toàn, tuy nhiên, có một tài khoản người dùng mà tôi không thể thả:

mysql> select host, user from mysql.user; 
+--------------------------------+------+ 
| host       | user | 
+--------------------------------+------+ 
| 127.0.0.1      | root | 
| ::1       | root | 
| My-Computer-Hostname.local  |  | 
| My-Computer-Hostname.local  | root | 
| localhost      | root | 
| localhost      | web | 
+--------------------------------+------+ 
6 rows in set (0.00 sec) 

mysql> drop user ''@'My-Computer-Hostname.local'; 
Query OK, 0 rows affected (0.00 sec) 

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

mysql> select host, user from mysql.user; 
+--------------------------------+------+ 
| host       | user | 
+--------------------------------+------+ 
| 127.0.0.1      | root | 
| ::1       | root | 
| My-Computer-Hostname.local  |  | 
| My-Computer-Hostname.local  | root | 
| localhost      | root | 
| localhost      | web | 
+--------------------------------+------+ 
6 rows in set (0.00 sec) 

mysql> 

Như bạn có thể thấy, MySQL báo cáo không có lỗi khi thực hiện lệnh DROP USER, nhưng không thực sự xóa người dùng!

Tôi cũng đã thử xóa người dùng khỏi trong phpMyAdmin (3.3.9) và tạo ra kết quả tương tự (tức là thành công được báo cáo, không có thông báo lỗi, người dùng không bị xóa).

Tôi đã nghiên cứu này và một số người gợi ý rằng CẤP có thể chặn lệnh thả USER, tuy nhiên, người dùng không có đặc quyền CẤP:

mysql> SHOW GRANTS FOR ''@'My-Computer-Hostname.local'; 
+-----------------------------------------------------------+ 
| Grants for @my-computer-hostname.local    | 
+-----------------------------------------------------------+ 
| GRANT USAGE ON *.* TO ''@'my-computer-hostname.local' | 
+-----------------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> REVOKE GRANT OPTION ON *.* FROM ''@'My-Computer-Hostname.local'; 
ERROR 1141 (42000): There is no such grant defined for user '' on host 'my-computer-hostname.local' 

tôi đã cố gắng thả người sử dụng trở lại sau đó, nhưng nó đã không 't thả/xóa người dùng.

Tôi đã kiểm tra nhật ký lỗi MySQl của mình và không có gì khác thường trong đó.

Hướng dẫn sử dụng MySQL gợi ý rằng có thể xóa tất cả các tài khoản ẩn danh, vậy tại sao tôi không thể xóa tài khoản này?

Trả lời

2

Bạn vẫn có thể xóa các bản ghi từ bảng người dùng:

mysql> DELETE FROM user WHERE host='my-computer-hostname.local';
Query OK, 2 rows affected (0.00 sec)

Phương pháp này đã được sử dụng trước khi MySQL 4.1 ...

6

Hoặc, để xóa chỉ là một trong vô danh và không phải là gốc:

mysql> XÓA TỪ mysql.user WHERE User = '' AND Host = 'my-computer-hostname.local';

Đã làm việc cho tôi trên 5.1.57.

0

MySQL bao gồm một tài khoản người dùng ẩn danh cho phép bất cứ ai để kết nối vào máy chủ MySQL mà không cần phải tài khoản người dùng. Điều này có nghĩa là chỉ để thử nghiệm, và cần được loại bỏ trước khi máy chủ cơ sở dữ liệu được đưa vào một môi trường sản xuất.

Chạy kịch bản SQL sau đây đối với máy chủ MySQL để loại bỏ các tài khoản người dùng ẩn danh:

DELETE FROM mysql.user WHERE User=''; 

Sau khi thực hiện thay đổi tài khoản cấp phép/người dùng, chắc chắn rằng bạn tuôn bảng provilege sử dụng lệnh sau:

FLUSH PRIVILEGES; 
Các vấn đề liên quan