在我的数据库中,我使用弱散列SHA1作为密码。我想把它们迁移到一个更强的哈希(bcrypt)。通常通过以下php脚本完成:
$sql = "SELECT user_id,password from users";
/**
* @var $pdo database connection
*/
$statement = $pdo->prepare('UPDATE users SET password = :password WHERE user_id = :user_id");
foreach( $pdo->query($sql) as $user)
{
$password = password_hash($user['password'],PASSWORD_DEFAULT);
$statement->bindParam(':password',$password);
$statement->bindParam(':user_id',$user['user_id']);
$stmt->execute();
}
但是在大型数据集上更新需要很长时间。因此,你知道一个更快的方法来散列所有用户的密码在postgresql与postgresql本地密码更新?
上面的代码也将在迁移脚本中运行,它也可能导致部署的一些延迟。
为了随时更新密码,请运行以下sql:
UPDATE users SET password = crypt(users.password,gen_salt('bf')), double_hash=true;
确保密码字段长度至少为72个字符。登录成功后,使用password_hash
重新散列提供的密码。