Magento 2: วิธีรีเซ็ตรหัสผ่านลูกค้าจากฐานข้อมูล


21

มันแฮสำหรับรหัสผ่านลูกค้าในฐานข้อมูล MD5 และ Sha1 ไม่ทำงาน

UPDATE `customer_entity` SET `password` = MD5('test123') WHERE `email` = 'X@X.com';

ดังนั้นวิธีอัพเดทรหัสผ่านโดยใช้การสืบค้นฐานข้อมูล อาจจะเป็นMD5(Sha1('test123'))อย่างไร

วีโอไอพีทำรหัสผ่านได้อย่างไร ไปที่vendor\magento\module-customer\Console\Command\UpgradeHashAlgorithmCommand.php

protected function execute(InputInterface $input, OutputInterface $output)
{
    $this->collection = $this->customerCollectionFactory->create();
    $this->collection->addAttributeToSelect('*');
    $customerCollection = $this->collection->getItems();
    /** @var $customer Customer */
    foreach ($customerCollection as $customer) {
        $customer->load($customer->getId());
        if (!$this->encryptor->validateHashVersion($customer->getPasswordHash())) {
            list($hash, $salt, $version) = explode(Encryptor::DELIMITER, $customer->getPasswordHash(), 3);
            $version .= Encryptor::DELIMITER . Encryptor::HASH_VERSION_LATEST;
            $customer->setPasswordHash($this->encryptor->getHash($hash, $salt, $version));
            $customer->save();
            $output->write(".");
        }
    }
    $output->writeln(".");
    $output->writeln("<info>Finished</info>");
}

โปรดพิจารณายอมรับคำตอบจาก @ 7ochem คำถามนี้มีอายุ 3 ปีแล้วและไม่มีคำตอบที่ยอมรับได้
Darren Felton

คำตอบ:


40

SQL นี้ใช้งานได้ดีในการอัพเดทรหัสผ่านลูกค้า ทดสอบกับ Magento 2.1.5

เพียงแค่เปลี่ยน "YOURPASSWORD" ด้านล่าง (เก็บ xxx: es) และ voila!

UPDATE `customer_entity`
SET `password_hash` = CONCAT(SHA2('xxxxxxxxYOURPASSWORD', 256), ':xxxxxxxx:1')
WHERE `entity_id` = 1;

4
โปรดทราบว่านี่จะเป็นการสร้างรหัสผ่านที่ไม่มีการชำระ เป็นเรื่องปกติในขั้นตอนการทดสอบ แต่ไม่ควรใช้เป็นวิธีปกติในการผลิตหรือจะลดความปลอดภัยลงอย่างมาก ดูคำตอบของ @ 7ochem สำหรับแนวทางที่ปลอดภัยยิ่งขึ้นที่สร้างเกลือที่ไม่ซ้ำใคร
Scott Buchanan

อย่างไรก็ตาม! วิธีนี้ใช้ได้ผล .. ขอบคุณ @Robban
Irfan Momin

30

ไม่เคยคิดว่าการใช้ hashing SHA ใน SQL โดยตรงจนกระทั่งผมเห็นRobban 's คำตอบ ฉันต้องการเพิ่มว่าคุณสามารถสร้างแฮชใน SQL ได้เช่นกันโดยปล่อยเฉพาะรหัสผ่านที่ควรเพิ่ม คุณสามารถใช้ตัวแปร ( set-statement ) เพื่อตั้งค่าที่จำเป็นทั้งหมดล่วงหน้า:

SET @email='emailaddress@example.com', @passwd='test@123', @salt=MD5(RAND());

UPDATE customer_entity
    SET password_hash = CONCAT(SHA2(CONCAT(@salt, @passwd), 256), ':', @salt, ':1')
    WHERE email = @email;

ฉันจำเป็นต้องอัพเดตลูกค้าทั้งหมดของหนึ่งฐานข้อมูลด้วยรหัสผ่านที่สร้างขึ้นมีวิธีทำเช่นนี้สำหรับทุกตารางหรือไม่
Christophe Ferreboeuf

นี่เป็นคำถามที่แตกต่างออกไปเล็กน้อยอาจคุ้มค่าที่จะตอบแยกต่างหาก คุณถามคำถามนี้เป็นคำถามใหม่ได้ไหม ฉันยินดีที่จะตอบว่า โปรดอย่าลืมเพิ่มเวอร์ชั่น Magento ของคุณในคำถาม
7ochem

คุณอาจใช้รหัสเอนทิตีของลูกค้าที่ถูกต้องเช่นเดียวกับในคำตอบของ @ Robban มากกว่าที่อยู่อีเมลลูกค้า ในโหมดหลายร้านเป็นไปได้ที่จะมีที่อยู่อีเมลเดียวกันปรากฏในตาราง customer_entity หลายครั้งและคุณไม่ต้องการอัปเดตทั้งหมดยกเว้นคุณตั้งใจจะอัปเดตทั้งหมด!
Dom

7

ฉันคิดว่ามันเป็นไปไม่ได้ที่จะตั้งรหัสผ่านจากภายใน DB คุณต้องทำการSHA256แฮชสำหรับรหัสผ่านลูกค้า นี่คือวิธีที่วีโอไอพีสร้างมันขึ้นมา:

รหัสผ่านตัวอย่างใน DB:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

นี่คือรูปแบบ:

A: B: C

ที่ไหน

B = $salt= สตริงแบบสุ่มที่มีอักขระ 32 ตัว

A = hash('sha256', $salt . $password);

C = รุ่นอัลกอริทึม Hashing (ค่าเริ่มต้น = 1)


คุณสามารถให้ตัวอย่างกับ @Aaron ได้ไหม testสมมติว่ารหัสผ่าน ตัวอย่าง PHP / Magento
Ankit Shah

7

คุณสามารถสร้างแฮชรหัสผ่านสไตล์วีโอไอพี 2 ได้อย่างง่ายดายผ่านทาง PHP ในบรรทัดคำสั่ง (CLI)

ใช้คำสั่งนี้เพื่อสร้างแฮชเป็นตัวอย่างสำหรับรหัสผ่านtest123(เปลี่ยนเป็นรหัสผ่านของคุณเอง):

php -r '$salt=md5(time());
  echo hash("sha256", $salt.$argv[1]).":$salt:1\n";' test123

ใช้ MD5 ของเวลา Epoch ปัจจุบัน ( time()) เป็นเกลือ แต่คุณสามารถใช้อย่างอื่นได้

คัดลอกแฮชที่สร้างขึ้นนี้แล้ววางลงในคิวรีหรือเครื่องมือจัดการฐานข้อมูลในpassword_hashคอลัมน์ของระเบียนลูกค้า


2

ลองใช้แบบสอบถาม mysql ด้านล่าง

update customer_entity set password_hash = CONCAT(md5('test123'),"::0") where entity_id = 233;

โดยที่ entity_id เป็นรหัสผู้ใช้ของคุณมี 3 ค่าคั่นด้วย: ลงชื่อเข้าใช้ในกรณีของเรา

  1. อย่างแรกคือ md5 ของรหัสผ่าน
  2. ข้อที่สองว่างเปล่าหรือว่างเปล่าเพราะเราไม่ได้ใช้เกลือใด ๆ
  3. ที่สามคือ 0 เพื่อระบุการใช้ md5

เมื่อคุณเรียกใช้แบบสอบถามนี้ใน db แล้วเข้าสู่ระบบโดยใช้รหัสผ่านดังกล่าวและกลับไปที่ตารางฐานข้อมูลและตรวจสอบรหัสผ่านคุณจะสังเกตเห็นว่า magento เปลี่ยนรหัสผ่านโดยอัตโนมัติเป็นรหัสผ่าน magento2 มาตรฐานเช่น xxxxxx: yyyyyy: 1

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