我正在编写类似于phpMyAdmin的代码。但是我需要用户能够使用他们在mysql数据库中的用户名和密码进行登录。我需要知道mysql数据库用来存储每个用户密码的哈希类型。我查看了dev.mysql.com,但没有找到任何答案,除了它是以*开头的较新的41字节哈希。
MySQL使用自己的算法加密存储在用户表中的密码。此加密与SQL函数PASSWORD()实现的加密相同,但不同于Unix登录过程中使用的加密。Unix密码加密与SQL函数ENCRYPT()实现的加密相同。请参阅Section 12.13,“加密和压缩函数”中PASSWORD()和ENCRYPT()函数的描述。
从4.1版本开始,MySQL采用更强大的身份验证方法,在连接过程中提供比早期版本更好的密码保护。即使TCP/IP数据包被窃听或mysql数据库被捕获,它也是安全的。 (在早期版本中,即使密码以加密形式存储在用户表中,知道加密密码值也可以用于连接到MySQL服务器。)Section 6.1.2.4,“MySQL中的密码哈希”进一步讨论了密码加密。
mysql
user
表中的密码也没有用处。您应该在应用程序中创建User
时使用设置的密码。如果您丢失了用户密码,则可以使用mysqladmin
将其重置。
SET PASSWORD FOR 'user-name-here'@'hostname-name-here' = PASSWORD('new-password-here');