ในระยะสั้นบน MariaDB
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
โดยที่คุณแทนที่ NEWPASSWORD ด้วยรหัสผ่านที่คุณต้องการและทุกอย่างจะเป็นคำต่อคำ
ปัญหาที่นี่คือเมื่อ MariaDB หรือ MySQL ได้รับการติดตั้ง / อัพเดท (โดยเฉพาะอย่างยิ่งถ้าในบางจุดรูทถูกตั้งค่าโดยไม่มีรหัสผ่าน) จากนั้นในตารางผู้ใช้รหัสผ่านจะว่างเปล่าจริง ๆ (หรือเพิกเฉย) และการล็อกอินขึ้นอยู่กับผู้ใช้ระบบ สำหรับผู้ใช้ MySQL คุณสามารถทดสอบได้ดังนี้โดยสลับไปที่รูทของระบบแล้วพิมพ์:
mysql -uroot -p
จากนั้นป้อนรหัสผ่านหรือรหัสผ่านไม่ถูกต้อง คุณอาจได้รับอนุญาตให้ใช้ (คุณอาจสามารถเข้าสู่ระบบจาก unix root ได้โดยเพียงแค่# mysql
ใช้รหัสผ่านที่ไม่เกี่ยวข้องและผู้ใช้กำหนดไว้)
แล้วเกิดอะไรขึ้น ถ้าคุณเข้าสู่ระบบด้วยรูทและทำสิ่งต่อไปนี้:
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
คุณจะทราบauth_socket
(ซึ่งอาจอ่านunix_socket
บน MariaDB) ซ็อกเก็ตเหล่านี้ไม่สนใจรหัสผ่านและอนุญาตให้ผู้ใช้ Unix ที่สอดคล้องกันโดยไม่ต้องตรวจสอบรหัสผ่าน นี่คือเหตุผลที่คุณสามารถล็อกอินด้วยรูทแต่ไม่ใช่กับผู้ใช้อื่น
ดังนั้นวิธีแก้ไขคือการอัพเดตผู้ใช้ไม่ให้ใช้auth_socket/unix_socket
และตั้งรหัสผ่านอย่างถูกต้อง
บน MariaDB (<10.2 ดูความคิดเห็นด้านล่าง) ซึ่งอยู่ใน Ubuntu เวอร์ชัน 16 ตั้งแต่ปี 2560 สิ่งนี้น่าจะเพียงพอ NEWPASSWORD เป็นรหัสผ่านของคุณ mysql_native_password
คุณพิมพ์คำต่อคำ
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
(เป็นไปได้ว่าการตั้งค่าปลั๊กอินให้ว่างจะใช้งานได้ YMMV ฉันไม่ได้ลองทำเช่นนี้เป็นทางเลือก)
UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
มิฉะนั้น:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';
แล้วก็
FLUSH PRIVILEGES;
สำหรับเร็กคอร์ดโซลูชันที่เกี่ยวข้องกับการลบผู้ใช้และสร้างใหม่ด้วย '%' ทำให้ฉันถูกล็อกออกจากฐานข้อมูลทั้งหมดและอาจทำให้เกิดปัญหาอื่น ๆ เว้นแต่ว่าคุณจะได้รับคำgrant
สั่งที่ถูกต้อง - ง่ายกว่าเพียงแค่อัพเดตรูทที่คุณมี
จากประสบการณ์ของฉันปัญหาเกิดขึ้นกับผู้ใช้รูทเท่านั้นเนื่องจากผู้ใช้รายอื่นจะถูกเพิ่มด้วยตนเองไม่ใช่ส่วนหนึ่งของการติดตั้ง / อัปเดตเริ่มต้น