마 젠토 2 : 데이터베이스에서 고객 비밀번호를 재설정하는 방법


19

DB의 고객 비밀번호 해시입니다. 따라서 MD5 & Sha1이 작동하지 않습니다.

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

데이터베이스 쿼리를 사용하여 비밀번호를 업데이트하는 방법 아마도MD5(Sha1('test123')) ?

Magento가 코드를 통해 수행하는 방식 이동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

답변:


38

이 SQL은 고객 비밀번호를 업데이트하는 데 적합합니다. Magento 2.1.5로 테스트했습니다.

아래 "YOURPASSWORD"를 변경하고 (xxx : es 유지) 짜라!

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

4
이것은 기본적으로 무염 암호를 생성합니다. 테스트 절차로는 문제가 없지만 프로덕션 환경에서 일반적인 방법으로 사용해서는 안됩니다. 그렇지 않으면 보안이 크게 약화됩니다. 독특한 소금을 생성하는보다 안전한 접근법은 @ 7ochem의 답변을 참조하십시오.
Scott Buchanan

어쨌든! 이 솔루션은 효과가 있습니다 .. 감사합니다 @Robban
Irfan Momin

30

Robban답변을 볼 때까지 SQL에서 SHA 해싱을 직접 사용한다고 생각하지 마십시오 . 추가해야 할 비밀번호 만 남겨두고 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;

생성 된 암호로 하나의 db의 모든 고객을 업데이트해야합니다. 모든 테이블에 대해이 작업을 수행 할 수 있습니까?
Christophe Ferreboeuf

이것은 약간 다른 질문이며, 별도로 대답 할 가치가 있습니다. 당신은 할 수 질문 새로운 질문으로이? 대답 해 드리겠습니다. 질문에 Magento 버전을 추가하는 것을 잊지 마십시오
7ochem

7

DB 내부에서 비밀번호를 설정할 수 있다고 생각하지 않습니다. SHA256고객 비밀번호에 대한 해싱 이 필요 합니다. Magento가 생성하는 방법은 다음과 같습니다.

DB의 비밀번호 예 :

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614 : 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm : 1

이것은 형식입니다.

알파벳

어디

B = $salt= 32 자의 임의 문자열

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

C = 해싱 알고리즘 버전 (기본값 = 1)


@Aaron을 예로들 수 있습니까? 비밀번호가이라고 가정하십시오 test. PHP / 마 젠토 예제
Ankit Shah

7

명령 줄 (CLI)의 PHP를 통해 Magento 2 스타일 비밀번호 해시를 매우 쉽게 생성 할 수 있습니다.

비밀번호의 예제로 해시를 생성하려면이 명령을 사용하십시오 test123(자신의 비밀번호로 변경).

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

현재 Epoch 시간 ( time())의 MD5를 소금으로 사용하고 있지만 다른 것을 사용할 수도 있습니다.

생성 된 해시를 복사하여 고객 레코드 password_hash열의 쿼리 또는 데이터베이스 관리 도구에 붙여 넣습니다 .


2

아래의 mysql 쿼리를 사용해보십시오.

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

entity_id는 사용자 ID입니다. 다음과 같이 구분 된 3 개의 값이 있습니다.

  1. 먼저 비밀번호의 md5입니다
  2. 소금을 사용하지 않기 때문에 두 번째는 비어 있거나 null입니다.
  3. 세 번째는 0으로 md5 사용을 나타냅니다.

이 쿼리를 db에서 실행 한 다음 언급 된 비밀번호를 사용하여 로그인하고 데이터베이스 테이블로 돌아가서 비밀번호를 확인하면 magento가 자동으로 표준 magento2 비밀번호 (예 : xxxxxx : yyyyyy : 1)로 비밀번호를 변경했음을 알 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.