วิธีตรวจสอบ, เปลี่ยนและรีเซ็ตรหัสผ่าน Root ของ MySQL (คู่มือฉบับสมบูรณ์สำหรับผู้เริ่มต้น)

目次

1. วิธีตรวจสอบรหัสผ่าน Root ของ MySQL

รหัสผ่าน root ของ MySQL เป็นองค์ประกอบสำคัญในการจัดการฐานข้อมูล อย่างไรก็ตาม โดยเฉพาะสำหรับผู้เริ่มต้น คุณอาจสงสัยว่า “ฉันไม่รู้รหัสผ่าน” หรือ “จะหารหัสผ่านเริ่มต้นได้จากที่ไหน?” ในส่วนนี้เราจะอธิบายวิธีการเฉพาะเพื่อตรวจสอบรหัสผ่าน root ของ MySQL

วิธีตรวจสอบรหัสผ่านเริ่มต้น

ใน MySQL 5.7 และรุ่นต่อไป รหัสผ่านเริ่มต้นสำหรับผู้ใช้ root จะถูกสร้างอัตโนมัติและบันทึกไว้ในไฟล์บันทึกระหว่างการติดตั้ง ทำตามขั้นตอนด้านล่างเพื่อดูรหัสผ่านชั่วคราวนี้

ขั้นตอน

  1. เปิดเทอร์มินัล (หรือ Command Prompt) เพื่อตรวจสอบไฟล์บันทึกของ MySQL
  2. รันคำสั่งต่อไปนี้:
    sudo grep 'temporary password' /var/log/mysqld.log
    
  1. ผลลัพธ์จะมีข้อความคล้ายกับต่อไปนี้:
    [Note] A temporary password is generated for root@localhost: EaGapdplN0*m
    
  1. ในกรณีนี้ EaGapdplN0*m คือรหัสผ่านเริ่มต้นสำหรับผู้ใช้ root

หมายเหตุสำคัญ

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

วิธีตรวจสอบรหัสผ่านปัจจุบัน

เพื่อความปลอดภัย MySQL ไม่ได้ให้คำสั่งหรือวิธีการที่จะแสดงรหัสผ่าน root ที่มีอยู่โดยตรง หากคุณไม่ทราบรหัสผ่านปัจจุบัน ให้ดูส่วน “วิธีทำเมื่อคุณลืมรหัสผ่าน Root” และพิจารณารีเซ็ตรหัสผ่านใหม่

2. วิธีเปลี่ยนรหัสผ่าน Root ของ MySQL

การเปลี่ยนรหัสผ่าน root ของ MySQL อย่างสม่ำเสมอเป็นสิ่งสำคัญสำหรับการรักษาความปลอดภัย ในส่วนนี้เราจะอธิบายอย่างละเอียดว่าต้องเปลี่ยนรหัสผ่านโดยใช้ข้อมูลประจำตัว root ปัจจุบันอย่างไร

ขั้นตอนพื้นฐานในการเปลี่ยนรหัสผ่าน

ทำตามขั้นตอนเหล่านี้เพื่อเข้าสู่ MySQL และตั้งรหัสผ่านใหม่

ขั้นตอน

  1. เปิดเทอร์มินัลหรือ Command Prompt แล้วพิมพ์คำสั่งต่อไปนี้เพื่อเข้าสู่ MySQL:
    mysql -u root -p
    
  • -u root ระบุว่าชื่อผู้ใช้คือ root
  • -p จะให้คุณใส่รหัสผ่านระหว่างการเข้าสู่ระบบ
  1. รันคำสั่ง SQL ต่อไปนี้เพื่อเปลี่ยนรหัสผ่าน:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword';
    
  1. โหลดข้อมูลสิทธิ์ใหม่โดยรันคำสั่ง:
    FLUSH PRIVILEGES;
    
  1. หลังจากรันคำสั่งสำเร็จแล้ว ให้ออกจาก MySQL:
    exit
    

หมายเหตุสำคัญ

  • ใช้รหัสผ่านที่แข็งแรง
    เราแนะนำให้รหัสผ่านใหม่ของคุณมีองค์ประกอบต่อไปนี้: ตัวอย่าง: MyS3cure!2025

    • ตัวอักษรพิมพ์ใหญ่และพิมพ์เล็ก
    • ตัวเลข
    • สัญลักษณ์ (เช่น @, #, $, !)
    • ความยาวอย่างน้อย 12 ตัวอักษร
    • ระวังเซสชันที่กำลังทำงาน
      หากคุณเปลี่ยนรหัสผ่านระหว่างเซสชันของ MySQL คุณอาจต้องเชื่อมต่อใหม่
    • ตรวจสอบสิทธิ์ของผู้ใช้
      ตรวจสอบให้แน่ใจว่าผู้ใช้ root มีสิทธิ์ที่เหมาะสม หากคุณไม่สามารถเปลี่ยนรหัสผ่านได้ ให้ติดต่อผู้ดูแลระบบของคุณ

ปัญหาทั่วไปเมื่อเปลี่ยนรหัสผ่าน

ไม่สามารถเข้าสู่ระบบได้หลังจากเปลี่ยนรหัสผ่าน

  • สาเหตุ: คุณอาจไม่ได้รันคำสั่ง FLUSH PRIVILEGES
  • วิธีแก้: เข้าสู่ระบบใหม่แล้วรัน FLUSH PRIVILEGES;

รหัสผ่านใหม่ไม่ตรงตามนโยบายความปลอดภัย

  • สาเหตุ: MySQL อาจเปิดใช้นโยบายรหัสผ่านที่เข้มงวดไว้
  • วิธีแก้: ตั้งรหัสผ่านที่แข็งแรงขึ้นหรือปรับการตั้งค่านโยบายตามความจำเป็น

3. วิธีทำเมื่อคุณลืมรหัสผ่าน Root

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

ขั้นตอนการรีเซ็ตรหัสผ่าน Root

1. หยุดบริการ MySQL

ก่อนอื่นให้หยุดบริการ MySQL เพื่อปิดฐานข้อมูลชั่วคราว ใช้คำสั่งต่อไปนี้:

sudo systemctl stop mysqld
  • หากคำสั่งทำงานสำเร็จ บริการ MySQL จะหยุดทำงาน.

2. เริ่ม MySQL ด้วยการปิดการตรวจสอบสิทธิ์

เริ่ม MySQL ด้วยตัวเลือก --skip-grant-tables เพื่อปิดการตรวจสอบสิทธิ์.

sudo mysqld_safe --skip-grant-tables &
  • คำสั่งนี้จะเริ่ม MySQL โดยไม่บังคับให้ตรวจสอบสิทธิ์
  • สำคัญ: เนื่องจากความปลอดภัยลดลงอย่างมากในโหมดนี้ ให้แน่ใจว่าไม่มีผู้ใช้คนอื่นเข้าถึงระบบขณะทำการนี้.

3. รีเซ็ตรหัสผ่านของ Root

เข้าสู่ระบบ MySQL ขณะที่การตรวจสอบสิทธิ์ถูกปิดและรีเซ็ตรหัสผ่าน.

  1. เข้าสู่ระบบ MySQL:
    mysql -u root
    
  1. ตั้งรหัสผ่าน root ใหม่ด้วยคำสั่งต่อไปนี้:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword';
    
  1. โหลดข้อมูลสิทธิ์ใหม่:
    FLUSH PRIVILEGES;
    
  1. หลังจากทำงานเสร็จแล้ว ให้ออกจากระบบ MySQL:
    exit
    

4. รีสตาร์ทบริการ MySQL

รีสตาร์ทบริการ MySQL เพื่อเปิดการตรวจสอบสิทธิ์ตามปกติอีกครั้ง:

sudo systemctl restart mysqld

หลังจากรีสตาร์ทแล้ว ให้เข้าสู่ระบบ MySQL ด้วยรหัสผ่านที่ตั้งใหม่.

หมายเหตุสำคัญ

  • รักษาความปลอดภัย
  • ขณะใช้ตัวเลือก --skip-grant-tables MySQL จะไม่มีการป้องกันใด ๆ ทำงานนี้ให้เร็วที่สุดและหลีกเลี่ยงความเสี่ยงที่ไม่จำเป็น
  • ผลกระทบต่อผู้ใช้คนอื่น
  • วิธีนี้ออกแบบมาสำหรับบัญชี root เท่านั้น ให้แน่ใจว่าผู้ใช้คนอื่นไม่ได้รับผลกระทบ

การแก้ไขปัญหา

ไม่พบคำสั่ง mysqld_safe

  • สาเหตุ: บนบางการแจกจ่ายของ Linux, mysqld_safe อาจไม่ได้ติดตั้ง
  • วิธีแก้: เริ่ม MySQL โดยตรงโดยใช้:
    sudo mysqld --skip-grant-tables &
    

ยังไม่สามารถเข้าสู่ระบบได้หลังจากรีเซ็ตรหัสผ่าน

  • สาเหตุ: MySQL อาจไม่ได้โหลดข้อมูลสิทธิ์ที่อัปเดตใหม่
  • วิธีแก้: เข้าสู่ระบบอีกครั้งและรัน FLUSH PRIVILEGES; .

4. แนวปฏิบัติที่ดีที่สุดเพื่อเสริมความปลอดภัยของ MySQL

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

ตั้งรหัสผ่านที่แข็งแรง

ความปลอดภัยของฐานข้อมูลขึ้นอยู่กับความแข็งแรงของรหัสผ่านอย่างมาก ปฏิบัติตามแนวทางต่อไปนี้เมื่อสร้างรหัสผ่านที่แข็งแรง.

แนวทางการสร้างรหัสผ่าน

  • ความยาว: อย่างน้อย 12 ตัวอักษร
  • ประเภทอักขระ: การผสมผสานของตัวอักษรพิมพ์ใหญ่, ตัวอักษรพิมพ์เล็ก, ตัวเลข, และสัญลักษณ์
  • ตัวอย่าง: 2#SecureMySQL_2025!

ใช้นโยบายความปลอดภัย

MySQL อนุญาตให้คุณกำหนดนโยบายการตรวจสอบรหัสผ่าน ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบนโยบายปัจจุบัน:

SHOW VARIABLES LIKE 'validate_password%';

หากจำเป็น ให้แก้ไขนโยบายดังนี้:

SET GLOBAL validate_password_policy = 'MEDIUM';
SET GLOBAL validate_password_length = 12;

ลบบัญชีและข้อมูลที่ไม่จำเป็น

ตรวจสอบและลบบัญชีที่ไม่จำเป็น

ระหว่างการติดตั้ง MySQL อาจสร้างบัญชีทดสอบเริ่มต้นหรือผู้ใช้ไม่ระบุชื่อ ซึ่งอาจเป็นความเสี่ยงด้านความปลอดภัยและควรลบหากไม่จำเป็น.

  1. ตรวจสอบรายการผู้ใช้ปัจจุบัน:
    SELECT user, host FROM mysql.user;
    
  1. ลบผู้ใช้ที่ไม่จำเป็น:
    DROP USER 'username'@'hostname';
    

ลบฐานข้อมูลทดสอบ

ลบฐานข้อมูลทดสอบที่สร้างขึ้นระหว่างการติดตั้ง:

DROP DATABASE test;

จำกัดการเข้าถึงบัญชี Root

การจำกัดการเข้าถึงบัญชี root จะเพิ่มความปลอดภัย.

จำกัดการเข้าถึงเฉพาะในเครื่องเท่านั้น

โดยค่าเริ่มต้น บัญชี root อาจอนุญาตการเชื่อมต่อจากระยะไกล ให้จำกัดการเข้าถึงเฉพาะในเครื่องเท่านั้น:

UPDATE mysql.user SET host = 'localhost' WHERE user = 'root';
FLUSH PRIVILEGES;

สร้างบัญชีผู้ดูแลแยกต่างหาก

แทนการใช้บัญชี root โดยตรง แนะนำให้สร้างบัญชีผู้ดูแลเฉพาะสำหรับงานที่กำหนด

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'StrongAdminPassword';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

ปรับใช้หลักการให้สิทธิ์น้อยที่สุด

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

ตรวจสอบสิทธิ์ที่มีอยู่

SHOW GRANTS FOR 'username'@'hostname';

เพิกถอนสิทธิ์ที่ไม่จำเป็น

REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'hostname';

อัตโนมัติการกำหนดค่าความปลอดภัย MySQL

MySQL มีคำสั่ง mysql_secure_installation เพื่อทำให้การกำหนดค่าความปลอดภัยง่ายขึ้น การรันคำสั่งนี้จะทำให้คุณสามารถ:

  • ลบบัญชีและฐานข้อมูลทดสอบ
  • ปิดการเข้าสู่ระบบ root จากระยะไกล
  • ใช้แนวทางความปลอดภัย

คำสั่งการดำเนินการ

sudo mysql_secure_installation

ทำการสำรองข้อมูลเป็นประจำ

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

ตัวอย่างการสำรองข้อมูล

  1. สำรองข้อมูลทุกฐานข้อมูล:
    mysqldump -u root -p --all-databases > backup.sql
    
  1. สำรองข้อมูลฐานข้อมูลเฉพาะ:
    mysqldump -u root -p database_name > database_name_backup.sql
    

5. คำถามที่พบบ่อย (FAQ)

ด้านล่างเป็นคำถามที่พบบ่อยและคำตอบเกี่ยวกับการจัดการรหัสผ่าน root ของ MySQL และการกำหนดค่าความปลอดภัย ใช้ส่วนนี้สำหรับการแก้ไขปัญหาและตอบข้อกังวลเพิ่มเติม

Q1. ฉันไม่พบรหัสผ่าน MySQL เริ่มต้นในบันทึก ควรทำอย่างไร?

A1:
ใน MySQL 5.7 และรุ่นต่อไป รหัสผ่านเริ่มต้นจะถูกบันทึกในไฟล์บันทึก (โดยทั่วไปคือ /var/log/mysqld.log) อย่างไรก็ตาม หากไม่พบไฟล์บันทึกหรือไฟล์ถูกลบ ให้ลองทำตามขั้นตอนต่อไปนี้:

  1. การติดตั้ง MySQL ใหม่จะสร้างรหัสผ่านชั่วคราวใหม่
  2. หากยังไม่สามารถเข้าสู่ระบบได้ ให้ดู “วิธีทำเมื่อคุณลืมรหัสผ่าน root” และรีเซ็ตรหัสผ่าน

Q2. ผู้ใช้ที่ไม่ใช่ root สามารถเปลี่ยนรหัสผ่านของตนโดยใช้ขั้นตอนเดียวกันได้หรือไม่?

A2:
ใช่ ผู้ใช้ที่ไม่ใช่ root สามารถเปลี่ยนรหัสผ่านของตนโดยใช้วิธีเดียวกันได้ อย่างไรก็ตาม จำเป็นต้องมีสิทธิ์ผู้ดูแลระบบสำหรับผู้ใช้นั้น ใช้คำสั่งต่อไปนี้:

ALTER USER 'username'@'hostname' IDENTIFIED BY 'NewStrongPassword';

Q3. ไม่พบคำสั่ง mysqld_safe ควรทำอย่างไร?

A3:
ในบางดิสทริบิวชันของ Linux mysqld_safe อาจไม่ได้ติดตั้ง ในกรณีนี้คุณสามารถเริ่ม MySQL ด้วยตัวเลือก --skip-grant-tables โดยใช้คำสั่ง mysqld ได้:

sudo mysqld --skip-grant-tables &

อย่างไรก็ตาม เนื่องจากวิธีนี้จะปิดการตรวจสอบสิทธิ์ จึงต้องใช้มาตรการความปลอดภัยเดียวกัน

Q4. ฉันเปลี่ยนรหัสผ่านแล้วแต่ยังเข้าสู่ระบบไม่ได้ ทำไม?

A4:
สาเหตุที่เป็นไปได้มีดังต่อไปนี้:

  1. ข้อมูลสิทธิ์ไม่ได้อัปเดต: หลังจากเปลี่ยนรหัสผ่าน ให้รันคำสั่งต่อไปนี้เพื่อรีเฟรชสิทธิ์:
    FLUSH PRIVILEGES;
    
  1. พิมพ์ผิด: ตรวจสอบให้แน่ใจว่าตัวอักษรใหญ่ ตัวอักษรเล็ก และอักขระพิเศษในรหัสผ่านใหม่ถูกป้อนอย่างถูกต้อง
  2. ข้อจำกัดนโยบายรหัสผ่าน: MySQL อาจปฏิเสธรหัสผ่านที่อ่อนตามนโยบายความปลอดภัย ตรวจสอบการตั้งค่านโยบายและใช้รหัสผ่านที่แข็งแรงกว่า

Q5. มีวิธีใดที่จะเสริมความปลอดภัย MySQL ทั้งหมดในครั้งเดียวหรือไม่?

A5:
เพื่อกำหนดค่าความปลอดภัย MySQL อย่างมีประสิทธิภาพ แนะนำให้ใช้คำสั่ง mysql_secure_installation คำสั่งนี้จะทำงานต่อไปนี้โดยอัตโนมัติ:

  • ลบผู้ใช้และฐานข้อมูลทดสอบ
  • ปิดการเข้าสู่ระบบ root จากระยะไกล
  • ใช้นโยบายรหัสผ่านที่แข็งแรง

รันคำสั่งดังนี้:

sudo mysql_secure_installation

Q6. การจัดการรหัสผ่านแตกต่างกันตามเวอร์ชันของ MySQL หรือไม่?

A6:
ใช่ วิธีการจัดการรหัสผ่าน root อาจแตกต่างกันตามเวอร์ชันของ MySQL ความแตกต่างหลักคือ:

  • MySQL 5.7 และรุ่นต่อไป: รหัสผ่านชั่วคราวจะถูกสร้างโดยอัตโนมัติและบันทึกในไฟล์บันทึก
  • MySQL 5.6 และรุ่นก่อนหน้า: รหัสผ่านเริ่มต้นอาจเป็นค่าว่าง (ไม่มีการตั้งรหัสผ่าน)

เพื่อตรวจสอบเวอร์ชันของ MySQL ให้ใช้คำสั่งต่อไปนี้:

mysql --version

Q7. ฉันจะอนุญาตการเชื่อมต่อระยะไกลสำหรับผู้ใช้ root ได้อย่างไร?

A7:
ด้วยเหตุผลด้านความปลอดภัย ไม่แนะนำให้เข้าถึง root จากระยะไกล อย่างไรก็ตาม หากจำเป็น คุณสามารถเปิดใช้งานได้ด้วยคำสั่งต่อไปนี้:

  1. อนุญาตการเข้าถึงจากระยะไกล:
    UPDATE mysql.user SET host = '%' WHERE user = 'root';
    
  1. โหลดข้อมูลสิทธิ์ใหม่:
    FLUSH PRIVILEGES;
    

Important:
หากคุณอนุญาตการเข้าถึงจากระยะไกล โปรดตรวจสอบให้แน่ใจว่าได้ดำเนินการมาตรการความปลอดภัยเพิ่มเติม เช่น กฎไฟร์วอลล์และการจำกัด IP

Q8. คุณสามารถอธิบายขั้นตอนการรีเซ็ตรหัสผ่าน root อย่างสั้นได้หรือไม่?

A8:

  1. หยุดบริการ MySQL:
    sudo systemctl stop mysqld
    
  1. เริ่ม MySQL โดยปิดการตรวจสอบสิทธิ์:
    sudo mysqld_safe --skip-grant-tables &
    
  1. รีเซ็ตรหัสผ่าน:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword';
    FLUSH PRIVILEGES;
    
  1. รีสตาร์ทบริการ MySQL:
    sudo systemctl restart mysqld