MySQLの暗号化をやってみよう
ここ2週間ぐらい昼と夜が逆転してます。今も夜勤(?)中です。
私の場合、なぜか昼より夜のほうが調子が良いのです。今に始まったことではなく一番古い記憶だと小学校5年生のときには夜型人間だと自覚していて、昔働いていた工場でも夜勤が楽しみで仕方なかった。なぜだろう?
そんな私に友人から一言「確実に体は蝕まれているので気をつけろ」と^^;
はい。気をつけます。。。
全く関係のない話から入りましたが、そろそろ本題に入ります。
今日はMySQLの暗号化を紹介します。
MySQLのPASSWORD関数は非推奨の為、出来る限り使用されないようにお願いします。
(2008.06.12 追加)
MySQLでパスワードを認証を行う場合、PASSWORD関数を使用します。
下記のように簡単なテーブルを作成してます。
CREATE TABLE users_table(
account TEXT NOT NULL,
pass_word TEXT NOT NULL
);
INSERTのときに「pass_word」フィールドを「PASSWORD」関数を使ってINSERTします。
INSERT INTO users_table (account, pass_word)
values("staff", PASSWORD('pass'));
認証は以下のように行います。
SELECT * FROM users_table
WHERE account='staff' AND pass_word=PASSWORD('pass');
PASSWORD関数は復元できないため、暗号化したパスワードを参照することはできません。
[PASSWORD関数の注意点]
MySQL4.0以前とMySQL4.1以降では仕様が変わっています。
MySQL4.0以前からMySQL4.1以降にアップグレードすると認証が使えなく可能性があります。
詳細はMySQLのリファレンスをご参照ください。
暗号化・復元の両方を行いたい場合はAES_ENCRYPT関数とAES_DECRYPT関数を使用します。
AES_ENCRYPT関数で暗号化をして、AES_DECRYPT関数で復元をします。
暗号化は以下のように行います。
INSERT INTO users_table (str)
values(AES_ENCRYPT('暗号化する文字列', 'password'));
復元は以下の通りです。
SELECT FROM AES_DECRYPT(str, 'password') FROM users_table
各関数の仕様は以下の通りです。
AES_ENCRYPT(str, key)
str:暗号化する文字列
key:暗号化用のパスワード
AES_DECRYPT(str, key)
str:復元するフィールド名
key:暗号化用のパスワード

コメント
「注記 :PASSWORD() 関数は、MySQL サーバの認証システムによって使用されます。独自にアプリケーションでは使用しないで ください。その代わりには、MD5() または SHA1() をお薦めします。」とのことです。
http://dev.mysql.com/doc/refman/5.1/ja/encryption-functions.html#function_password
投稿者: password()について | 2008年05月15日 13:51
ご指摘感謝します。
投稿者: Piyohiko | 2008年06月12日 18:01