SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

MySQL8.0で PASSWORD()の代替関数

問題

MySQL8.0では、PASSWORD()関数がなくなっています。

MySQL5.7以前のPASSWORD関数と同じ結果を得る方法はないですか?

答え

別の古いMySQLに接続できる場合

古いMySQLに接続してPASSWORD関数を実行すれば、結果を取得することはできる。

SELECT PASSWORD('password1234');

結果

*D65798AAC0E5C6DF3F320F8A30E026E7EBD73A95

phpで対応する場合

調べてみたら、PASSWORD関数のロジックは案外単純だった。

関数にするとこんな風になる。

function mysql_password($input) {
    return '*' . strtoupper(sha1(sha1($input, true)));
}

使用例

<?php var_dump(mysql_password('password1234'));

実行結果

string(41) "*D65798AAC0E5C6DF3F320F8A30E026E7EBD73A95"

MySQLで対応する場合

他の関数を組み合わせて生成できる。

SELECT UPPER(CONCAT('*', SHA1(UNHEX(SHA1('password1234')))));

実行結果

*D65798AAC0E5C6DF3F320F8A30E026E7EBD73A95

 

以上、案外簡単に同じ結果を得ることができた。

関連するメモ

コメント