Điểm:4

Cảnh báo MySQL "Người dùng tồn tại" nhưng người dùng không có trong bảng "người dùng"

lá cờ in
Zak

Tôi đã có vấn đề này trong nhiều tuần. Tôi không biết phải tìm ở đâu tiếp theo. Tôi đã làm sạch, xả nước, khởi động lại mysql dịch vụ, khởi động lại Ubuntu người phục vụ. Điều gì có thể gây ra điều này CẢNH BÁO và người dùng không hiển thị trong người dùng cái bàn? Tôi cũng đã cố gắng THẢ người dùng và lấy 0 hàng bị ảnh hưởng kết quả là. Điều này là bực bội ngoài niềm tin! Thông tin người dùng còn được lưu trữ trong Schema ở đâu nữa và làm cách nào để xóa thông tin đó?

Ảnh chụp màn hình

CẬP NHẬT

Khi tôi grep tên người dùng trong /var/lib/mysql/mysql Tôi tìm thấy tên người dùng trong db.MYD tập tin. Mặc dù tôi không thể chỉnh sửa nó. Vì vậy, tôi biết tên người dùng tồn tại ở đâu đó KHÁC với bảng người dùng.

lá cờ us
Nếu bạn tạo một `mysqldump`, bạn sẽ có thể tìm ra bảng nào chứa mục nhập đó. Lệnh có thể giống như sau:`mysqldump -u YourUser -p YourDatabaseName >wandsqlfile.sql`. Bạn sẽ có thể xem tệp kết xuất đó bằng trình chỉnh sửa yêu thích của mình.
Zak avatar
lá cờ in
Zak
Xong .. Và không tìm thấy người dùng trong kết xuất .. Tuy nhiên nếu bạn xem bản cập nhật của tôi . Người dùng được tìm thấy trong tệp `mysql/db.MYD` ..
lá cờ in
Vui lòng không đăng ảnh chụp màn hình văn bản mà bạn chỉ có thể sao chép và dán. Sao chép và dán nó thay thế.
Điểm:11
lá cờ mx

This happens when a user is created and granted privileges and then deleted from mysql.user instead of being dropped:

First, create a user admin_x@localhost:

mysql> create user admin_x@localhost identified by 'abc123';
Query OK, 0 rows affected (0.01 sec)

Check if the user is in mysql.user:

mysql> select user, host from mysql.user where user='admin_x';
+---------+-----------+
| user    | host      |
+---------+-----------+
| admin_x | localhost |
+---------+-----------+
1 row in set (0.01 sec)

Okay.

Now we grant this user access to db test:

mysql> grant all on test.* to admin_x@localhost;
Query OK, 0 rows affected (0.00 sec)

And check it:

mysql> show grants for admin_x@localhost;
+---------------------------------------------+
| Grants for admin_x@localhost                              |
+---------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'admin_x'@'localhost'      |
| GRANT ALL PRIVILEGES ON `test`.* TO 'admin_x'@'localhost' |
+---------------------------------------------+
2 rows in set (0.00 sec)

Now delete the user improperly from mysql.user:

mysql> delete from mysql.user where user='admin_x';
Query OK, 1 row affected (0.00 sec)

And the user is no longer in mysql.user:

mysql> select user from mysql.user where user='admin_x';
Empty set (0.00 sec)

But when you now try to create it new, you get an error:

mysql> create user admin_x@localhost identified by 'abc123';
ERROR 1396 (HY000): Operation CREATE USER failed for 'admin_x'@'localhost'

That is because admin_x@localhost still has privileges stored in mysql.db:

mysql> select User from mysql.db where user='admin_x';
+---------+
| User    |
+---------+
| admin_x |
+---------+
1 row in set (0.00 sec)

Now, when you drop the user

mysql> drop user admin_x@localhost;
Query OK, 0 rows affected (0.00 sec)

it is really gone and you can create it again:

mysql> create user admin_x@localhost identified by 'abc123';
Query OK, 0 rows affected (0.00 sec)
Zak avatar
lá cờ in
Zak
Câu trả lời của bạn đã dẫn tôi đi đúng hướng! Tôi đã cố gắng bỏ .. nhiều lần .. Vấn đề là người dùng vẫn xuất hiện trong bảng **file** `db.MYD` cho cơ sở dữ liệu đó (`mysql`) -- Vì vậy, tôi đã sao chép (kết xuất) mysql cơ sở dữ liệu .. Đã tạo một bản sao .. Đã chèn tệp kết xuất .. Sau đó, tôi đã sao chép lại các tệp `db.MYI` `db.MYD`, `db.opt` và `db.frm` và thay đổi quyền sở hữu của các tệp đã nói quay lại `mysql:mysql` -- Đã xóa, khởi động lại mysql và voila! Tôi không thể xem các tệp vật lý db so với đầu ra của `select User from mysql.db where user='admin_x';` Cảm ơn bạn đã trả lời!
digijay avatar
lá cờ mx
Lạ là `drop` không hoạt động, tôi cũng thắc mắc tại sao bạn nhận được cảnh báo thay vì lỗi khi tạo lại người dùng. Dù sao, rất vui vì tôi có thể giúp đỡ!
lá cờ co
@digijay OP đã thực thi câu lệnh "tạo người dùng * nếu không tồn tại *", người dùng tồn tại theo logic DB, do đó không có hàng nào bị ảnh hưởng và cảnh báo

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.