我正在编写一个快速 REST 服务来管理我们域的电子邮件帐户,并且遇到了我无法解释的奇怪行为。
我正在使用 mysql 对电子邮件帐户进行身份验证,我们的 REST 服务管理邮件目录并使用 Web 界面插入或更新身份验证凭据。插入用户和更新密码的查询都使用encrypt
mysql 命令。
奇怪的是,在 REST 界面上至少更改一次密码之前,插入的用户将无法进行身份验证。这意味着encrypt
为更新设置了正确的值,但为插入设置了错误的值。
我已尝试在其余服务端的 GET/POST 参数中记录所有内容,但似乎数据库层出现了问题。REST 服务在两个端点记录正确的密码参数。执行查询的过程有所不同。
我的查询看起来像这样(在 Python 中使用 MySQLdb):
ADD_USER = "INSERT INTO users (id,name,maildir,crypt) VALUES (%s,%s,%s,encrypt(%s));"
CHANGE_PASS = "UPDATE users SET crypt = encrypt(%s) WHERE id=%s"
再次,ADD_USER
输入一个错误的哈希值,CHANGE_PASS
成功地使用完全相同的 HTTP 参数crypt
传递给它们(作为字符串)。数据层是否有任何理由会进行不同的加密,或者我是在吠叫错误的树吗?