คุณจะปิดการใช้งานเข้าสู่ระบบที่ไม่ระบุชื่อได้อย่างไร


9

ตามเอกสาร 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 และสิทธิ์ล้าง ไม่มีโชคฉันยังคงสามารถลงชื่อเข้าใช้ด้วยชื่อผู้ใช้ที่ไม่มีรหัสผ่าน


คำตอบ:


6

ฉันคิดออก ในขณะที่ /etc/mysql/my.cnf ไม่มีคีย์รหัสผ่านเก็บไว้ แต่มีรหัสผ่านที่เก็บไว้ใน /root/.my.cnf

ทันทีที่ฉันแสดงความคิดเห็นรหัสผ่านใน /root/.my.cnf ฉันไม่ได้รับอนุญาตให้ลงชื่อเข้าใช้โดยไม่มีรหัสผ่าน (ซึ่งเป็นสิ่งที่ฉันคาดไว้)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.