我想使用AuthType Basic
对来自MySQL 5.1数据库的文件夹的用户进行身份验证
密码以纯文本形式存储(它们实际上不是密码,因此无关紧要)
但是,apache的密码格式仅允许Linux系统上的SHA1,MD5 as described here。
如何使用SQL查询生成正确的格式?看起来像apache格式是一种长度为20的二进制格式,但mysql SHA1
函数返回40长。
我的SQL查询是这样的:
SELECT CONCAT('{SHA}', BASE64_ENCODE(SHA1(access_key))) FROM user_access_keys INNER JOIN users ON user_access_keys.user_id = users.id WHERE name = %s
其中base64_encode
是存储函数(Mysql 5.1还没有TO_BASE64
)。此查询返回一个61字节的BLOB,它与apache使用的格式不同。我怎么能生成相同的格式?
您也可以为此建议其他方法。关键是我想使用纯文本作为密码从MySQL5.1数据库验证用户。
答案 0 :(得分:2)
您所引用的文档并不意味着“仅使用Unix”意味着非Linux,因此您可以使用crypt()。由于您似乎对安全性一无所知,我建议这是MySQL encrypt函数的最简单选择。您可能希望在查询中使用常量种子值。
SELECT ENCRYPT(access_key, 'SA') FROM user_access_keys INNER JOIN users ON user_access_keys.user_id = users.id WHERE name = %s