[pgsql-jp: 39377] BYTEA型の値の検索方法

Imaoka Yumiko shinoi @ osk2.3web.ne.jp
2008年 5月 6日 (火) 18:10:54 JST


いつもお世話になります。今岡と申します。

業務でDB上の個人情報を暗号化して持つことを要求され、
該当するDBテーブルの列をbytea型にし、暗号化した結果の
バイナリデータを格納し、取り出したバイナリ文字列を
元の文字列に復号化するところまでは実装出来たのですが、
検索でひっかかってしまいました。
もし、同じような経験をされた方がおられましたら、
アドバイスをお願い致します。

画面で入力されたユーザID、パスワードでもって
DBを検索に行くのですが、当然ユーザIDもパスワードも
暗号化されたバイナリデータとしてbytea型でDBに格納
されています。
それをWHERE文でlike検索ではなく"="の完全一致で
引っ掛けるべく入力値を暗号化し、insert文にはめ込む時と
同様にPHPの関数pg_escape_byteaを通してselect文を
作成しクエリ送信するのですが、該当件数ゼロで返ってきます。

bytea型のデータは、そもそもWHEREで検索出来ないのでしょうか?
それとも、ここでお尋ねすべきでないPHPの処理の問題でしょうか?
マニュアルを見る限りでは、bytea型データは文字列比較が
可能のようです。

ちなみにLIKE検索の場合は、全データを復号化して別テーブルに
入れてそれを検索する必要があると考えています。
bytea型でWHEREの完全一致検索が無理なら、同じようにするしか
ないのですが。
識者の方のご意見をよろしくお願い致します。

PostgreSQL Version.8.1.4
PHP 5.1.6
文字コード UTF-8




pgsql-jp メーリングリストの案内