ฉันจะดึงข้อมูลชื่อผู้ใช้และรหัสผ่าน MySQL ของฉันได้อย่างไร


คำตอบ:


186

หยุดกระบวนการ MySQL

เริ่มกระบวนการ MySQL ด้วยตัวเลือก --skip-grant-tables

เริ่มไคลเอนต์คอนโซล MySQL ด้วยตัวเลือกรูท -u

รายชื่อผู้ใช้ทั้งหมด;

SELECT * FROM mysql.user;

รีเซ็ตรหัสผ่าน;

UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

แต่อย่าลืมที่จะ

หยุดกระบวนการ MySQL

เริ่มกระบวนการ MySQL ตามปกติ (เช่นไม่มีตัวเลือก --skip-grant-tables)

เมื่อเสร็จแล้ว มิฉะนั้นความปลอดภัยของฐานข้อมูลของคุณอาจถูกบุกรุก


7
คิดว่าคุณไม่จำเป็นต้องรีสตาร์ท daemon เพื่อรีเซ็ตผู้ใช้ปกติ เพียงแค่ "สิทธิ์ล้าง;" หลังจากอัปเดตรหัสผ่านผู้ใช้ --skip-grant-tables จำเป็นสำหรับการรีเซ็ตรหัสผ่านผู้ใช้รูทเท่านั้น! โดยทั่วไปจะไม่แนะนำให้ทำการรีเซ็ตผู้ใช้มาตรฐาน
Amos Folarin

การใช้dpkg-reconfigure mysql-server-5.5คำสั่งเพื่อรีเซ็ตรหัสผ่าน root ของ MySQL มีความสำคัญอย่างไร
phillipsK

@ Xenph ทำไมคุณถึงพูดว่า " เริ่มต้นไคลเอนต์คอนโซล MySQL ด้วยตัวเลือก -u root " มีจุดในการทำที่ที่ทุกคนเป็นไม่ได้จะถูกละเว้นเมื่อเซิร์ฟเวอร์จะเริ่มต้นด้วย-u --skip-grant-tables
Pacerier

15
ใน MySQL 5.7. * ไม่มีคอลัมน์ที่mysql.userเรียกpasswordใช้authentication_stringแทน
Adib Aroui

3
ฉันพบสิ่งนี้ + stackoverflow.com/a/35277160/1604601มีประโยชน์มาก
Alien Life Form

42

น่าเสียดายที่รหัสผ่านผู้ใช้ของคุณไม่สามารถเรียกคืนได้ มันถูกแฮชด้วยแฮชทางเดียวซึ่งถ้าคุณไม่รู้ว่ามันไม่สามารถย้อนกลับได้ ฉันแนะนำให้ไปกับ Xenph Yan ด้านบนและเพิ่งสร้างใหม่

คุณยังสามารถใช้ขั้นตอนต่อไปนี้จากคู่มือการตั้งค่ารหัสผ่านสำหรับบัญชีroot MySQL บน Windows:

  1. เข้าสู่ระบบของคุณในฐานะผู้ดูแลระบบ
  2. หยุดเซิร์ฟเวอร์ MySQL ถ้ามันกำลังทำงานอยู่ สำหรับเซิร์ฟเวอร์ที่ใช้งานเป็นบริการ Windows ให้ไปที่ตัวจัดการบริการ:

เมนูเริ่ม -> แผงควบคุม -> เครื่องมือการดูแลระบบ -> บริการ

จากนั้นค้นหาบริการ MySQL ในรายการและหยุด หากเซิร์ฟเวอร์ของคุณไม่ได้ทำงานเป็นบริการคุณอาจต้องใช้ตัวจัดการงานเพื่อบังคับให้หยุดทำงาน

  1. สร้างไฟล์ข้อความและวางคำสั่งต่อไปนี้ไว้ในนั้น เปลี่ยนรหัสผ่านด้วยรหัสผ่านที่คุณต้องการใช้

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;
    

    คำสั่ง UPDATEและFLUSHแต่ละรายการจะต้องเขียนในบรรทัดเดียว UPDATEคำสั่งรีเซ็ตรหัสผ่านสำหรับบัญชีทั้งหมดที่มีอยู่รากและล้างคำสั่งบอกเซิร์ฟเวอร์เพื่อโหลดตารางให้ในหน่วยความจำ

  2. บันทึกไฟล์ สำหรับตัวอย่างนี้ไฟล์จะมีชื่อว่าC: \ mysql-init.txt
  3. เปิดหน้าต่างคอนโซลเพื่อไปที่พร้อมท์คำสั่ง:

    เมนูเริ่ม -> เรียกใช้ -> cmd

  4. เริ่มเซิร์ฟเวอร์ MySQL ด้วยตัวเลือก--init-fileพิเศษ:

    C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt

    หากคุณติดตั้ง MySQL ไปยังตำแหน่งอื่นที่ไม่ใช่C: \ mysqlให้ปรับคำสั่งตามนั้น

    เซิร์ฟเวอร์รันเนื้อหาของแฟ้มการตั้งชื่อโดยที่--init ไฟล์ตัวเลือกที่เริ่มต้นการเปลี่ยนแปลงแต่ละรากรหัสผ่านของบัญชี

    คุณยังสามารถเพิ่มตัวเลือก--consoleลงในคำสั่งหากคุณต้องการให้เซิร์ฟเวอร์เอาท์พุทปรากฏในหน้าต่างคอนโซลแทนในไฟล์บันทึก

    หากคุณติดตั้ง MySQL โดยใช้ตัวช่วยสร้างการติดตั้ง MySQL คุณอาจต้องระบุตัวเลือก--defaults-file :

    C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini" --init-file=C:\mysql-init.txt

    การตั้งค่า--defaults-fileที่เหมาะสมสามารถพบได้โดยใช้ Services Manager:

    เมนูเริ่ม -> แผงควบคุม -> เครื่องมือการดูแลระบบ -> บริการ

    ค้นหาบริการ MySQL ในรายการคลิกขวาแล้วเลือกตัวเลือก Properties ฟิลด์ Path to executable มีการตั้งค่า--defaults-file

  5. หลังจากที่เซิร์ฟเวอร์ได้เริ่มประสบความสำเร็จในการลบC: \ MySQL-init.txt
  6. หยุดเซิร์ฟเวอร์ MySQL จากนั้นรีสตาร์ทในโหมดปกติอีกครั้ง หากคุณเรียกใช้เซิร์ฟเวอร์เป็นบริการให้เริ่มจากหน้าต่างบริการของ Windows หากคุณเริ่มเซิร์ฟเวอร์ด้วยตนเองให้ใช้คำสั่งใดก็ได้ตามปกติ

ตอนนี้คุณควรจะสามารถเชื่อมต่อกับ MySQL ในฐานะรูทโดยใช้รหัสผ่านใหม่ได้แล้ว


5
@ เจค - ขอบคุณสำหรับคำตอบ ฉันต้องการยกนิ้วให้ แต่ด้วยเหตุผลบางอย่าง stackoverflow ไม่อนุญาตให้ฉันทำเช่นนั้นเพราะคะแนนชื่อเสียง คำอธิบายของคุณ "น่าเสียดายที่ผู้ใช้รหัสผ่านของคุณจะแก้ไขไม่ได้. จะได้รับการถกกับกัญชาวิธีหนึ่งซึ่งถ้าคุณไม่ทราบว่าเป็นกลับไม่ได้" เป็นกุญแจสำคัญในการเข้าใจของฉันทำไมทุกสิ่งทุกอย่างที่ผมอ่านใน Google เท่านั้นให้ฉันเส้นทางไปเปลี่ยนของฉัน รหัสผ่าน คำอธิบายที่ดีนั้นลึกซึ้งกว่าคำแนะนำเพียงอย่างเดียว
dsdsdsdsd

1
@ Jake ฉันไม่สามารถหา mysql ในรายการบริการได้โปรดบอกฉันว่าจะทำอย่างไร?

1
เป็นของคุณทำไมmysqld-ntแทนmysqld?
Pacerier

Btw มีตัวเลือกที่ไม่ใช่ไฟล์--init-fileหรือไม่? (สิ่งที่คล้ายกับ--executeคำสั่งของ mysql.exe )
Pacerier

34

การปรับปรุงคำตอบที่มีประโยชน์ที่สุดที่นี่:

1] ไม่จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์ mysql
2] ข้อกังวลด้านความปลอดภัยสำหรับเซิร์ฟเวอร์ MySQL ที่เชื่อมต่อกับเครือข่าย

ไม่จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์ MySQL

ใช้FLUSH PRIVILEGES;หลังคำสั่ง mysql.user สำหรับการเปลี่ยนรหัสผ่าน

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

--skip-grant-optionsช่วยให้ทุกคนที่จะเชื่อมต่อได้โดยไม่ต้องใช้รหัสผ่านและมีสิทธิ์ทั้งหมด เนื่องจากสิ่งนี้ไม่ปลอดภัยคุณอาจต้องการ

ใช้--skip-grant-tablesร่วมกับ--skip-networkingเพื่อป้องกันไม่ให้ไคลเอนต์ระยะไกลเชื่อมต่อ

จาก: การอ้างอิง: การรีเซ็ต - สิทธิ์ - ทั่วไป


@ThinkingMonkey สิ่งนี้ไม่ถือว่าผู้ใช้ที่เข้าสู่ระบบในปัจจุบันมีสิทธิ์ในการแก้ไขmysql.userหรือไม่ แม้ว่าบ่อยครั้งนั่นไม่ใช่กรณี
Pacerier

6

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

ใน Windows ข้อมูลประจำตัวจะถูกเก็บไว้ใน% APPDATA% \ MySQL \ Workbench \ workbench_user_data.dat - เข้ารหัสด้วยCryptProtectData (โดยไม่ต้องมีเอนโทรปีเพิ่มเติม) การถอดรหัสนั้นง่ายมาก

std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
    DATA_BLOB inblob { length, input };
    DATA_BLOB outblob;

    if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
            throw std::runtime_error("Couldn't decrypt");
    }

    std::vector<unsigned char> output(length);
    memcpy(&output[0], outblob.pbData, outblob.cbData);

    return output;
}

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


2
มันสมบูรณ์แบบ มี exe พร้อมด้วยซอร์สโค้ดใน snemarch ของเธรดที่กล่าวถึงเพื่อดึงรหัสผ่านบัญชีผู้ใช้ของฉันที่เก็บอยู่ในห้องนิรภัย MySQL Workbench ของฉัน แม้ว่าวิธีการอื่น ๆ เหล่านี้อาจใช้ได้เช่นกันหากฉันมีสิทธิ์ในการอ่านหรืออัปเดตตารางผู้ใช้
RobbZ

แต่พูดค่อนข้างน้อยคนที่ใช้ Workbench
Pacerier

นี่คือการใช้งานอื่นซึ่งสามารถเรียกใช้หลังจากสร้างด้วย Visual Studio เพื่อกู้คืนชื่อผู้ใช้และรหัสผ่านที่เก็บไว้ของ Workbench: github.com/wclear/MySQLWorkbenchPasswordView
bnp887

6

ทำได้โดยไม่ต้องเสียเวลา

รันคำสั่งต่อไปนี้ใน Terminal เพื่อเชื่อมต่อกับ DBMS (คุณจำเป็นต้องเข้าถึงรูท):

sudo mysql -u root -p;

เรียกใช้รหัสผ่านอัปเดตของผู้ใช้เป้าหมาย (สำหรับตัวอย่างชื่อผู้ใช้ของฉันคือmousaviและต้องเป็นรหัสผ่าน123456):

UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';  

ณ จุดนี้คุณต้องทำการ flush เพื่อทำการเปลี่ยนแปลง:

FLUSH PRIVILEGES;

ทำ! คุณทำโดยไม่หยุดหรือเริ่มบริการ mysql ใหม่


5

หากคุณมีสิทธิ์เข้าถึงรูทไปยังเซิร์ฟเวอร์ที่รัน mysql อยู่คุณควรหยุดเซิร์ฟเวอร์ mysql โดยใช้คำสั่งนี้

sudo service mysql stop

ตอนนี้เริ่ม mysql โดยใช้คำสั่งนี้

sudo /usr/sbin/mysqld --skip-grant-tables  --skip-networking &

ตอนนี้คุณสามารถเข้าสู่ mysql โดยใช้

sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

คำแนะนำแบบเต็มสามารถดูได้ที่นี่http://www.techmatterz.com/recover-mysql-root-password/


3

เข้าสู่ระบบ MySql จาก windows cmd โดยใช้ผู้ใช้ที่มีอยู่:

mysql -u ชื่อผู้ใช้ -p
ป้อนรหัสผ่าน: ****

จากนั้นรันคำสั่งต่อไปนี้:

mysql> SELECT * FROM mysql.user;

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

mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

จากนั้นเข้าสู่ระบบโดยใช้รหัสผ่านใหม่และผู้ใช้


0

หากคุณมีการตั้งค่า ODBC คุณสามารถรับรหัสผ่านได้จากไฟล์ปรับแต่ง ODBC นี่คือใน /etc/odbc.ini สำหรับ Linux และในโฟลเดอร์ Software / ODBC ในรีจิสตรีใน Windows (มีหลายอัน - อาจใช้เวลาในการหาข้อมูล)


0

บันทึกไฟล์ สำหรับตัวอย่างนี้ไฟล์จะมีชื่อว่า C: \ mysql-init.txt มันขออนุญาตผู้ดูแลระบบสำหรับการบันทึกไฟล์


-1

แม้ว่าการตีความคำถามวิทยาศาสตร์ของวิทยาการคอมพิวเตอร์อย่างเข้มงวดและสมเหตุสมผลจะต้องมีทั้ง "ฉันจะเรียกข้อมูลชื่อผู้ใช้ MySQL ของฉัน" และ "รหัสผ่าน" ได้อย่างไร - ฉันคิดว่ามันอาจเป็นประโยชน์กับบางคนในการอธิบายการตีความOR กล่าวอีกนัยหนึ่ง ...

1) ฉันจะดึงข้อมูลชื่อผู้ใช้ MySQL ของฉันได้อย่างไร

หรือ

2) รหัสผ่าน

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

ในการค้นหาชื่อผู้ใช้ mysql ของคุณให้รันคำสั่งต่อไปนี้จากเปลือก mysql ...

เลือกผู้ใช้จาก mysql.user;

มันจะพิมพ์ตารางของผู้ใช้ mysql ทั้งหมด


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