Score:4

MySQL เตือน "ผู้ใช้มีอยู่" แต่ผู้ใช้ไม่อยู่ในตาราง "ผู้ใช้"

ธง in
Zak

ฉันมีปัญหานี้มาหลายสัปดาห์แล้ว ฉันไม่รู้ว่าจะดูที่ไหนต่อไป ฉันได้ทำความสะอาด ล้างข้อมูล รีสตาร์ท มายเอสคิวแอล บริการ, รีบูตเครื่อง อูบุนตู เซิร์ฟเวอร์ อะไรทำให้เกิดสิ่งนี้ได้ คำเตือน และผู้ใช้จะไม่แสดงใน ผู้ใช้ ตาราง? ฉันยังพยายาม ผู้ใช้ DROP และได้รับ 0 แถวได้รับผลกระทบ ผลที่ตามมา. สิ่งนี้น่าผิดหวังเกินกว่าจะเชื่อ! ข้อมูลผู้ใช้ถูกจัดเก็บไว้ในที่ใดอีกใน Schema และฉันจะล้างได้อย่างไร

ภาพหน้าจอ

อัปเดต

เมื่อฉัน grep ชื่อผู้ใช้ใน /var/lib/mysql/mysql ฉันพบชื่อผู้ใช้ใน db.MYD ไฟล์. แม้ว่าฉันไม่สามารถแก้ไขได้ ดังนั้นฉันจึงรู้ว่าชื่อผู้ใช้นั้นอยู่ที่อื่นนอกเหนือจากตารางผู้ใช้

us flag
หากคุณสร้าง `mysqldump` คุณควรจะสามารถทราบได้ว่าตารางใดมีรายการนั้น คำสั่งอาจเป็นดังนี้: `mysqldump -u YourUser -p YourDatabaseName > ต้องการsqlfile.sql` คุณควรจะดูไฟล์ที่ดัมพ์ด้วยโปรแกรมแก้ไขที่คุณชื่นชอบ
Zak avatar
in flag
Zak
เสร็จสิ้น .. และไม่พบผู้ใช้ในการถ่ายโอนข้อมูล .. อย่างไรก็ตาม หากคุณดูการอัปเดตของฉัน พบผู้ใช้ในไฟล์ `mysql/db.MYD` ..
in flag
โปรดอย่าโพสต์ภาพหน้าจอของข้อความที่คุณสามารถคัดลอกและวางได้ คัดลอกและวางแทน
Score:11
ธง 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
in flag
Zak
คำตอบของคุณทำให้ฉันไปในทิศทางที่ถูกต้อง! ฉันพยายามทิ้ง .. หลายครั้ง .. ปัญหาคือผู้ใช้ยังคงปรากฏในตาราง **file** `db.MYD` สำหรับฐานข้อมูลนั้น (`mysql`) - ดังนั้นฉันจึงคัดลอก (ทิ้ง) mysql ฐานข้อมูล .. สร้างสำเนา .. แทรกไฟล์ดัมพ์ .. จากนั้นฉันก็คัดลอกไฟล์ `db.MYI` `db.MYD`, `db.opt` และ `db.frm` กลับมาและเปลี่ยนความเป็นเจ้าของไฟล์ดังกล่าว กลับไปที่ `mysql:mysql` -- ล้างข้อมูล รีสตาร์ท mysql และ voila! ฉันล้มเหลวในการดูไฟล์ฟิสิคัล db เทียบกับเอาต์พุตของ `select User from mysql.db โดยที่ user='admin_x';` ขอบคุณที่ตอบ!
digijay avatar
mx flag
น่าแปลกที่ `drop` ใช้ไม่ได้ ฉันยังสงสัยว่าทำไมคุณได้รับคำเตือนแทนที่จะเป็นข้อผิดพลาดเมื่อสร้างผู้ใช้ใหม่ อย่างไรก็ตาม ดีใจที่ฉันสามารถช่วยได้!
co flag
@digijay OP ดำเนินการคำสั่ง "สร้างผู้ใช้ *ถ้าไม่มีอยู่*" ผู้ใช้มีอยู่ตามตรรกะของ DB ดังนั้นจึงไม่มีแถวที่ได้รับผลกระทบและมีคำเตือน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา