10

以前 (MySQL 5.7) では、このコマンドを使用して新しいメール アドレスを既存のテーブルに追加していました。

INSERT INTO `servermail`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user@example.com'),

その後、dovecot はユーザーを認証できました。( dovecot パスワード スキームに関する詳細情報
) 現在、Encrypt は MySQL の最近のバージョンでは非推奨になっています。(リンク)

SHA2 を使用してそのコマンドを書き直したいのですが、成功しませんでした。

編集:
これは、誰かがPostfix、Dovecot、MySQL、および SpamAssassinを使用してメール サーバーを構成する方法を使用して、Mysql のバージョン 8.0 でメール サーバーを構成するのに役立ちます。

4

2 に答える 2

2

SHA512-CRYPT を MySQL 内に実装することは不可能のようです。Dovecot に関する限り、最初から暗号化を使用することを提案する理由が理解できないことは認めます。OPが提案したように強力なハッシュを使用すると、少なくとも同様に機能し、より安全になります。

私はソルトを追加したパスワードを好むので、Dovecot のSSHA512を使用する方法は次のとおりです

INSERT INTO `virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
(NULL, '1',  (SELECT REPLACE(TO_BASE64(CONCAT(UNHEX(SHA2(CONCAT('YourPasswordHere', v.salt), 512)), v.salt)), '\n', '') AS salted FROM (SELECT SHA2(RAND(), 512) AS salt) v), 'user@example.com');

または、パスワードを更新するには:

UPDATE virtual_users
SET `password` = (
    SELECT REPLACE(TO_BASE64(CONCAT(UNHEX(SHA2(CONCAT('YourPasswordHere', v.salt), 512)), v.salt)), '\n', '') AS salted
    FROM (
        SELECT SHA2(RAND(), 512) AS salt
    ) v
)
WHERE email = 'user@example.com';

これらのクエリ:

  1. ランダムな (かなり長い) ソルトを生成する
  2. パスワードにソルトを追加する
  3. #2 の SHA512 ハッシュを取得する
  4. ハッシュをバイナリに変換する
  5. #4に塩を追加
  6. 全体をBase64に変換
  7. TO_BASE64()MySQL の関数によって追加された不要な改行を削除します

password結果は 256 バイトの長さの文字列になるため、フィールドを VARCHAR(256)に更新する必要がある場合があります。

暗号化されたパスワードを手動で生成するために使用することを提案するチュートリアルがいくつかありますが、doveadmこれはうまく機能しますが、少し面倒です. 興味のある方は、次のように呼び出すことができます。

doveadm pw -s SHA512-CRYPT -p "YourPasswordHere"

さらに便利なのは、生成されたパスワードを同じユーティリティで検証する機能です。

doveadm auth test user@example.com YourPasswordHere
于 2021-09-08T14:31:50.627 に答える