MySQLテーブルを使用してエントリを格納する単純なメッセージシステム(PHP)ページを作成する実験を行っています。表で使用する列の概要は次のとおりです。
msg_id(主キー、auto_increment)
ser_id(メッセージを作成したユーザーを指す外部キー)
time(メッセージのタイムスタンプを提供するDATETIMEエントリ)
msg(メッセージを含むVARCHAR)
アクセス可能(単なるint(1)、0はユーザー自身がメッセージを読むことができることを除いて誰もいないことを意味し、1は他の人がメッセージを読むことができることを意味します)
私が思っているのは、詮索好きな目がそれを読み取れないようにmsgフィールドを暗号化する最良の方法は何ですか(たとえば、mysql CLIまたはphpMyAdminを開いて、行)?
「アクセス可能」が0に設定されている場合、(一部のPHPページにアクセスすることにより)ユーザー自身のみがそれを読むことができますが、1に設定されている場合、他のすべてのユーザーができるはずです。私もこれに取り組む方法がわからないので、どんな助けでも大歓迎です!
可能な暗号化関数のリストについては、こちらをご覧ください:
http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html
更新のトリガーを作成し、フィールドaccessable
を確認できます。そんな感じ:
CREATE TRIGGER crypt_trg BEFORE UPDATE ON table FOR EACH ROW
BEGIN
IF new.accessable = 0 THEN
SET new.msg := ENCRYPT(new.msg, 'key');
ELSE
SET new.msg := DECRYPT(new.msg, 'key');
END IF;
END;
次のクエリを使用して、テーブル内のすべての既存のレコードを更新することもできます。
UPDATE table SET msg = IF(accessable = 0, ENCRYPT(msg, 'key'), DECRYPT(msg, 'key'));
したがって、レコードを選択できますPHPコード:
SELECT msg_id, user_id, time, IF(accessable = 0, DECRYPT(msg, 'key'), msg) msg
FROM table
UPD。また、同様の質問がここにありました:
クエリの前にデータを暗号化して挿入することもできます。これにより、MySQLはknowでも暗号化せず、アプリケーションでの取得時に復号化します。そのためには、それをvarbinary列またはblob列に格納する必要があります。