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
以上、案外簡単に同じ結果を得ることができた。
コメント