Bil*_*win 23
MySQL的PASSWORD()函数的文档说明:
PASSWORD()函数由MySQL服务器中的身份验证系统使用; 你不应该在自己的应用程序中使用它.
阅读" 您可能错误地存储密码 ",以获得有关散列和存储密码的更好建议.
MD5和SHA-1被认为太弱而无法用于密码.目前的建议是使用SHA-256.
我为MySQL提供了一个补丁来支持一个SHA2()功能,补丁被接受了,但是由于他们的路线图已经改变,所以不清楚什么时候它会成为一个发布的产品.
在此期间,您可以在编程语言中使用散列和salting,并将结果散列摘要存储在数据库中.如果使用PHP,则hash()函数中提供SHA-256 .
更新: MySQL 5.5.8于2010年12月发布,该版本包含对该SHA2()功能的支持.
dav*_*vek 10
如果您使用数据库函数来散列密码,那么根据定义,它们必须未加入到数据库中:我更愿意更接近"源",即在前端应用程序中,因此您不会传递暴露的信息.
我相信PASSWORDMySQL中的实际功能是不安全的,并且已被破坏,但我目前找不到链接.我知道较旧的(OLD_PASSWORD5 岁及以上)肯定是不安全的.
当然,所有密码应始终与盐一起存储(为了进一步默默无闻).例:
UPDATE users SET password=MD5(CONCAT('salt', 'user provided value')) WHERE id=54
Run Code Online (Sandbox Code Playgroud)
还有这个MD5功能,但随着巨大的彩虹表的兴起,作为一种完全混淆存储密码的方式,它不是100%可靠的.
更好的方法是在密码到达数据库之前对密码进行哈希处理(使用salt).例:
<?php
$password = sha1(SALT.$_POST["password"]);
$sql = "UPDATE users SET password='".$password."' WHERE id=54";
?>
Run Code Online (Sandbox Code Playgroud)