ตามเอกสาร MySQLคุณสามารถทำให้เซิร์ฟเวอร์ MySQL แข็งขึ้นได้โดยการเพิ่มรหัสผ่านหรือลบบัญชีที่ไม่ระบุชื่อ
หากคุณต้องการป้องกันไม่ให้ลูกค้าเชื่อมต่อในฐานะผู้ใช้ที่ไม่ระบุชื่อโดยไม่มีรหัสผ่านคุณควรกำหนดรหัสผ่านให้กับบัญชีที่ไม่ระบุชื่อแต่ละบัญชีหรือลบบัญชีออก
ก่อนที่จะทำให้แข็งตารางผู้ใช้ของฉันมีลักษณะเช่นนี้
mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user | host | password |
+------------------+-----------+-------------------------------------------+
| root | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| root | gitlab | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | gitlab | |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+
ฉันได้ลบบัญชีที่ไม่ระบุชื่อทั้งหมดออกดังนั้นตารางผู้ใช้จะเป็นดังนี้ (ฉันใช้หุ่นเชิดเพื่อจัดการผู้ใช้ แต่หุ่นกระบอกดำเนินการตามDROP USER
คำสั่งอย่างมีประสิทธิภาพ)
mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user | host | password |
+------------------+-----------+-------------------------------------------+
| root | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+
ทำไมฉันยังสามารถเข้าสู่ระบบทดสอบของฉันโดยไม่มีชื่อผู้ใช้หรือรหัสผ่าน
ฉันต้องทำอย่างไรเพื่อป้องกันไม่ให้ผู้ใช้ที่ไม่ต้องการเข้าสู่ระบบ
root@gitlab:~# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 98
Server version: 5.5.32-0ubuntu0.12.04.1 (Ubuntu)
....
mysql>
อัปเดต : ฉันเพิ่งค้นพบว่าฉันสามารถเข้าสู่ระบบในฐานะรูทได้โดยไม่ต้องป้อนรหัสผ่าน
Update2 : ฉันพบคำถามนี้ซึ่งมีข้อมูลที่ดี แต่ไม่สามารถแก้ปัญหาได้
ไม่มีผู้ใช้ที่ไม่ระบุชื่อ
mysql> select user,host,password from mysql.user where user='';
Empty set (0.00 sec)
root@localhost
ฉันเข้าสู่ระบบเป็น
mysql> select USER(),CURRENT_USER();
+----------------+----------------+
| USER() | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
ฉันไม่มีรหัสผ่านเริ่มต้นหรือ skip-grant-tables ที่กำหนดใน my.cnf
root@gitlab:~# cat /etc/mysql/my.cnf |grep -i 'skip-grant-tables'|wc -l
0
root@gitlab:~# cat /etc/mysql/my.cnf |grep -i 'pass'|wc -l
0
อัปเดต 3 :
ฉันได้ลองทำตามขั้นตอนเหล่านี้ด้วยหุ่นกระบอก (ซึ่งควรทำการล้างข้อมูลโดยอัตโนมัติ) ฉันมีสิทธิ์ล้างด้วยตนเองและพยายามเริ่ม mysql
Update4 :
ฉันได้ลองเปลี่ยนรหัสผ่าน root mysql และสิทธิ์ล้าง ไม่มีโชคฉันยังคงสามารถลงชื่อเข้าใช้ด้วยชื่อผู้ใช้ที่ไม่มีรหัสผ่าน