まず、本番環境で実行する前に開発マシンでこれらすべてを試してください。また、本番環境で実行する前にデータベースをバックアップしてください。このような移行スクリプトは、データを失う最も簡単な方法です。
1)データベースに(タイプのENUM
)フィールドを作成し、パスワードフィールドの暗号化のタイプを示します。デフォルト値を「暗号化されていない」に設定します
これがなく、何らかの理由で更新スクリプトが失敗した場合は、ハーフハッシュのデータベースが残ります。
どうやってするか:
ALTER TABLE application.users
ADD password_type ENUM('unencrypted', 'SHA256') NOT NULL;
2)暗号化されていないパスワードを1つ検索し、それをハッシュ/ソルト/保存するphpスクリプトを作成します。
<?php
mysql_connect("hostname", "user", "pass") or die(mysql_error());
mysql_select_db("application") or die(mysql_error());
// Get all the data from the "example" table
$result = mysql_query("SELECT * FROM users WHERE password_type = 'unencrypted'")
or die(mysql_error());
// keeps getting the next row until there are no more to get
$row = mysql_fetch_array( $result );
$pw = $row['password'];
$id = $row['user_id_num'];
$id = (int) $id;
$hashed_password = hash("sha256", $pw);
mysql_query("UPDATE users SET password_type = 'SHA256' AND SET password = '$hashed_password' WHERE user_id_num = $id")
or die(mysql_error());
?>
3)そのスクリプトを変更して、たとえば一度に100を実行します。
4)Linuxツールを使用してスクリプトをcron
毎分起動します。データベース全体がハッシュされるまでそのままにしておきます。
私はあなたのデータベースにあるものの名前についていくつかの仮定をしたことに注意してください。