Magento 2: Jak zresetować hasło klienta z bazy danych


21

Jest hash dla hasła klienta w DB. Więc MD5 i Sha1 nie działają.

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

Jak zaktualizować hasło za pomocą zapytania do bazy danych. Może być MD5(Sha1('test123'))?

Jak działa Magento za pomocą kodu. iść dovendor\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>");
}

Proszę rozważyć przyjęcie odpowiedzi od @ 7ochem. To pytanie ma teraz 3 lata i nie ma akceptowanej odpowiedzi.
— Darren Felton,

Odpowiedzi:


40

Ten kod SQL działa dobrze, aby zaktualizować hasło klienta. Testowane z Magento 2.1.5.

Po prostu zmień „HASŁO” poniżej (zachowaj xxx: es) i voila!

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

4
Pamiętaj, że spowoduje to utworzenie niesolonego hasła. Jest w porządku jako procedura testowa, ale nie powinna być stosowana jako zwykła metoda w produkcji, ponieważ znacznie obniży bezpieczeństwo. Zobacz odpowiedź @ 7ochem, aby uzyskać bardziej bezpieczne podejście, które generuje unikalne sole.
— Scott Buchanan,

Tak czy siak! To rozwiązanie działa .. Dzięki @Robban
— Irfan Momin

30

Nigdy nie myślałem o użyciu SHA hashowania w SQL bezpośrednio dopóki nie zobaczyłem RobbaN „s odpowiedź . Chciałbym dodać, że możesz wygenerować skrót również w języku SQL, pozostawiając tylko hasło, które należy dodać. Możesz użyć zmiennych ( zestaw-instrukcji ), aby ustawić wszystkie niezbędne wartości z góry:

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;

Muszę zaktualizować wszystkich klientów jednego db przy użyciu wygenerowanego hasła, czy istnieje sposób, aby to zrobić dla całej tabeli?
— Christophe Ferreboeuf,

To nieco inne pytanie, być może warto na nie odpowiedzieć osobno. Czy możesz to zadać jako nowe pytanie? Z przyjemnością odpowiem na to pytanie. Nie zapomnij dodać swojej wersji Magento do pytania
— 7ochem

Prawdopodobnie powinieneś używać poprawnego identyfikatora jednostki klienta, jak w odpowiedzi @ Robban, zamiast adresu e-mail klienta. W trybie wielu sklepów możliwe jest wielokrotne wyświetlanie tego samego adresu e-mail w tabeli customer_entity i nie chcesz aktualizować ich wszystkich, chyba że masz zamiar je wszystkie zaktualizować!
— Dom

7

Nie sądzę, że można ustawić hasło z poziomu bazy danych. Potrzebujesz SHA256hasła do haseł klientów. Oto jak Magento to generuje:

przykładowe hasło w DB:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

to jest format:

ABC

Gdzie

B = $salt= losowy ciąg 32 znaków

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

C = Wersja algorytmu mieszania (domyślnie = 1)


Czy możesz podać przykład @Aaron. Załóżmy, że hasło to test. Przykład PHP / Magento
— Ankit Shah

7

Możesz łatwo wygenerować skrót hasłowy w stylu Magento 2 za pośrednictwem PHP w wierszu poleceń (CLI).

Użyj tego polecenia, aby wygenerować skrót, jako przykład hasła test123(zmień je na własne hasło):

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

Wykorzystuje MD5 bieżącego czasu Epoki ( time()) jako sól, ale możesz także użyć wszystkiego innego.

Skopiuj wygenerowany skrót i wklej go do narzędzia do zarządzania zapytaniami lub bazą danych w password_hashkolumnie rekordu klienta .


2

Wystarczy wypróbować poniższe zapytanie mysql

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

Gdzie ID_użytkownika jest twoim identyfikatorem użytkownika Istnieją 3 wartości oddzielone: ​​znak W naszym przypadku

  1. Pierwszy to md5 hasła
  2. Drugi jest pusty lub zerowy, ponieważ nie używamy soli
  3. Trzeci to 0, co oznacza użycie md5

Po uruchomieniu tego zapytania w db, a następnie zaloguj się przy użyciu wspomnianego hasła i wróć do tabeli bazy danych i sprawdź hasło, zauważysz, że magento automatycznie zmieniło hasło na standardowe hasło magento2, tj. Xxxxxx: rrrrr: 1

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.