如何为DBD和MySQL 5.1使用的Apache2身份验证生成正确的密码格式?

时间:2012-09-23 06:57:03

标签: mysql apache authentication apache2 mod-auth

我想使用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数据库验证用户。

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