ドメインの電子メールアカウントを管理するための簡単なRESTサービスの作成に取り組んでいますが、説明できない奇妙な動作に遭遇しました。
mysqlを使用して電子メールアカウントを認証しています。RESTサービスがmaildirを管理し、Webインターフェイスを使用して認証資格情報を挿入または更新します。ユーザーを挿入するためのクエリとパスワードを更新するためのクエリは、どちらもencrypt
mysqlコマンドを使用します。
奇妙なことに、挿入されたユーザーは、RESTインターフェースでパスワードが少なくとも1回変更されるまで、認証のために機能しません。これはencrypt
、更新には正しい値を設定しているが、挿入には何か問題があることを意味します。
RESTサービス側の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"
繰り返しますが、(文字列として)渡されるのとまったく同じHTTPパラメータADD_USER
で成功する不正なハッシュを入力しています。データ層が異なる暗号化を行う理由はありますか、それとも間違ったツリーを吠えていますか?CHANGE_PASS
crypt