วิธีแก้ไขข้อผิดพลาด MySQL 1698: คำแนะนำโดยละเอียด

เผยแพร่แล้ว: 2024-03-28

คุณได้ลองเข้าถึงฐานข้อมูล MySQL ในฐานะผู้ใช้รูทแล้ว แต่กลับพบข้อความแสดงข้อผิดพลาด MySQL error 1698 (28000): Access rejected for user 'root'@'localhost'? นี่เป็นปัญหาทั่วไปสำหรับผู้ที่ทำงานกับ MySQL ป้องกันการเข้าถึงฐานข้อมูลด้วยวิธีการต่างๆ รวมถึงเทอร์มินัล, PHPMyAdmin หรืออินเทอร์เฟซไคลเอนต์ MySQL พบบ่อยกว่าระบบปฏิบัติการ (OS) อื่น ๆ ข้อผิดพลาดนี้จะปรากฏขึ้นสำหรับผู้ใช้ระบบ Ubuntu

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

ข้อผิดพลาด MySQL 1698 คืออะไรและสาเหตุเบื้องหลังคืออะไร

เบื้องหลังข้อผิดพลาด MySQL 1698 คือปัญหาของวิธีที่ MySQL ตรวจสอบว่ามีคนพยายามใช้มันเป็นผู้ใช้ 'รูท' ที่ได้รับอนุญาตให้ทำเช่นนั้นหรือไม่ สำหรับระบบปฏิบัติการบางระบบ MySQL จะไม่ใช้รหัสผ่านปกติสำหรับผู้ใช้ 'รูท' บัญชีรูทของ MySQL จะตรวจสอบผ่านปลั๊กอิน auth_socket หรือ unix_socket ปลั๊กอินนี้ทำงานโดยอิงตามข้อมูลประจำตัวของระบบปฏิบัติการแทนที่จะเป็นรหัสผ่าน โดยตรวจสอบว่าคำขอเชื่อมต่อผู้ใช้ผ่านซ็อกเก็ต UNIX หรือไม่ จากนั้นตรวจสอบความถูกต้องของชื่อผู้ใช้กับข้อมูลประจำตัวของระบบ

โดยพื้นฐานแล้ว หากคุณไม่ได้เข้าสู่ระบบระบบปฏิบัติการในฐานะผู้ใช้ 'รูท' MySQL จะไม่อนุญาตให้คุณเข้าถึงระบบปฏิบัติการในฐานะผู้ใช้ 'รูท' วิธีนี้ควรจะทำให้สิ่งต่าง ๆ ปลอดภัยและง่ายขึ้น แต่ในกระบวนการนั้น ข้อผิดพลาด 1698 อาจเกิดขึ้น

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

 > ข้อผิดพลาด MySQL 1698 (28000)

เมื่อเรียนรู้เพิ่มเติมเกี่ยวกับข้อผิดพลาด MySQL 1698 เราพบว่าสาเหตุหลักไม่ได้เกิดจากแนวคิดเดิมๆ ของรหัสผ่าน แต่เป็นวิธีการตรวจสอบสิทธิ์ที่ไม่เหมือนใคร วิธีการนี้เกี่ยวข้องกับปลั๊กอิน auth_socket หรือ unix_socket ที่เรากล่าวถึงข้างต้น

โดยพื้นฐานแล้วปลั๊กอินนี้ไม่ได้รบกวนรหัสผ่านเลย แต่จะตรวจสอบว่าการเชื่อมต่อเกิดขึ้นผ่านซ็อกเก็ต UNIX หรือไม่ จากนั้นตรวจสอบว่าชื่อผู้ใช้ที่พยายามเชื่อมต่อตรงกับชื่อผู้ใช้ที่เข้าสู่ระบบหรือไม่

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

จะแก้ไขข้อผิดพลาด MySQL 1698 ได้อย่างไร?

เรามาหารือเกี่ยวกับโซลูชันที่จะทำงานกับข้อผิดพลาด MySQL 1698 และรับประกันการโต้ตอบฐานข้อมูลที่มีประสิทธิภาพในอนาคต

เปลี่ยนผู้ใช้เป็นปลั๊กอิน mysql_native_password

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

  1. เข้าถึงเชลล์ MySQL ในฐานะผู้ใช้ที่มีสิทธิ์
  2. ใช้คำสั่งนี้เพื่อเปลี่ยนวิธีการตรวจสอบสิทธิ์ของผู้ใช้รูทเป็น ` mysql_native_password `:
 เปลี่ยนผู้ใช้ 'root'@'localhost' ที่ระบุด้วย mysql_native_password โดย 'your_new_password';

3. สิทธิ์ฟลัชเพื่อใช้การเปลี่ยนแปลง:

 สิทธิ์ล้าง;

4. ออกจากเชลล์ MySQL แล้วลองเข้าสู่ระบบในฐานะผู้ใช้รูทอีกครั้ง

เพิ่มผู้ใช้ระบบลงในตารางผู้ใช้ MySQL

การเพิ่มผู้ใช้ระบบลงในตารางผู้ใช้ MySQL และการเปิดใช้งานปลั๊กอิน ` auth_socket ` จะช่วยเพิ่มความปลอดภัย วิธีการนี้ใช้ประโยชน์จากการตรวจสอบสิทธิ์ระดับระบบปฏิบัติการ โดยอนุญาตให้เข้าถึงฐานข้อมูลในลักษณะที่ปลอดภัยกว่าการตรวจสอบรหัสผ่านแบบเดิม วิธีการนี้ช่วยลดความเสี่ยงที่เกี่ยวข้องกับการใช้บัญชีรูทโดยตรงสำหรับการดำเนินการฐานข้อมูล

  1. เข้าสู่ระบบเซิร์ฟเวอร์ MySQL ในฐานะผู้ใช้รูทหรือผู้ใช้รายอื่นที่มีสิทธิ์เพียงพอ
  2. สร้างผู้ใช้ใหม่และตั้งค่าการรับรองความถูกต้องเป็น ` auth_socket `:
 สร้างผู้ใช้ 'your_system_user'@'localhost' ที่ระบุด้วย auth_socket;

3. ให้สิทธิ์ที่จำเป็นแก่ผู้ใช้ใหม่:

 ให้สิทธิ์ทั้งหมดบน *.* ถึง 'your_system_user'@'localhost' ด้วยตัวเลือกการให้สิทธิ์

4. สิทธิ์ฟลัชเพื่อใช้การเปลี่ยนแปลง:

 สิทธิ์ล้าง;

5. เข้าสู่ระบบ MySQL ด้วยผู้ใช้ระบบใหม่ โดยใช้ข้อมูลรับรองระบบปฏิบัติการสำหรับการตรวจสอบสิทธิ์

ปิดใช้งานการรับรองความถูกต้อง unix_socket

หากคุณต้องการวิธีแก้ปัญหาอย่างรวดเร็ว การปิดใช้งานการรับรองความถูกต้องของซ็อกเก็ต UNIX สามารถให้วิธีแก้ปัญหาได้ทันทีแม้ว่าจะมีความปลอดภัยน้อยกว่าก็ตาม วิธีการนี้อนุญาตให้ผู้ใช้รูทเข้าสู่ระบบโดยใช้โปรโตคอลรหัสผ่านมาตรฐานโดยการลบปลั๊กอินซ็อกเก็ต UNIX ออกจากวิธีการพิสูจน์ตัวตนของผู้ใช้รูท แม้ว่าวิธีนี้จะช่วยแก้ไขปัญหาการเข้าถึงได้ แต่คุณควรพิจารณาถึงข้อดีข้อเสียด้านความปลอดภัยที่อาจเกิดขึ้นด้วย

  1. เปิดคอนโซล MySQL
  2. อัพเดตผู้ใช้รูทเพื่อปิดใช้งานการรับรองความถูกต้องซ็อกเก็ต UNIX:
 อัปเดตปลั๊กอิน mysql.user SET='' WHERE User='root';

3. สิทธิ์ฟลัชเพื่อบันทึกการเปลี่ยนแปลง:

 สิทธิ์ล้าง;

ขณะนี้ผู้ใช้รูทสามารถตรวจสอบสิทธิ์โดยใช้รหัสผ่าน โดยข้ามวิธีซ็อกเก็ต UNIX

บทสรุป

ข้อผิดพลาด MySQL 1698 เป็นเหมือนอุปสรรคในการพยายามเข้าถึงฐานข้อมูลของคุณ ไม่ว่าคุณจะพบข้อผิดพลาดนี้เป็นครั้งแรกหรือพยายามป้องกันไม่ให้เกิดเหตุการณ์เช่นนี้ขึ้นอีก การทำความเข้าใจข้อมูลเฉพาะของข้อผิดพลาดนี้เป็นสิ่งสำคัญ ในการแก้ไขข้อผิดพลาด MySQL 1698 คุณต้องมีความเข้าใจอย่างถ่องแท้เกี่ยวกับสถาปัตยกรรมการรับรองความถูกต้องของ MySQL โดยเฉพาะอย่างยิ่งเมื่อสถาปัตยกรรมดังกล่าวมาบรรจบกับแนวปฏิบัติด้านความปลอดภัยระดับระบบปฏิบัติการ เช่น ที่พบในระบบ Ubuntu

ข้อผิดพลาด MYSQL 1698 ซึ่งปฏิเสธการเข้าถึงผู้ใช้รูทจำเป็นต้องมีการกำหนดค่ากลไกการตรวจสอบความถูกต้องอย่างรอบคอบภายใน MySQL

เราได้พูดคุยถึงวิธีการแก้ปัญหาอย่างละเอียดตั้งแต่การเปลี่ยนปลั๊กอินการรับรองความถูกต้องเป็น ` mysql_native_password ` การรวมผู้ใช้ระบบเข้ากับตารางผู้ใช้ของ MySQL ด้วยปลั๊กอิน ` auth_socket ` หรือปิดการใช้งานการรับรองความถูกต้อง UNIX_socket โดยสิ้นเชิง แต่ละโซลูชันนำเสนอแนวทางเฉพาะในการหลีกเลี่ยงข้อผิดพลาด ซึ่งปรับแต่งให้เหมาะสมกับมาตรการรักษาความปลอดภัยและการตั้งค่าด้านผู้ดูแลระบบที่แตกต่างกัน สิ่งที่คุณเลือกจะขึ้นอยู่กับระดับความปลอดภัยที่คุณต้องการใช้ระบบการจัดการฐานข้อมูลของคุณ