考えられる方式は2つある。
その1 テーブル丸ごと暗号化
テーブル作成時に暗号化オプションを指定する。
CREATE TABLE sample_tbl (
id int(10) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100))
ENGINE=innodb ENCRYPTION=’Y’;
既存テーブルを暗号化するにはこんな感じで。
ALTER TABLE sample_tbl ENCRYPTION=’Y’;
その2 カラム単位で暗号化
テーブル全体を暗号化すると手動での保守性が大幅にダウン。パスワードなど特定のカラムだけ暗号化したデータをセットする方法。
暗号化 AES_ENCRYPT
復号化 AES_DECRYPT
CREATE TABLE sample_tbl (
id int(10) PRIMARY KEY AUTO_INCREMENT, passwd VARCHAR(100))
ENGINE=innodb;
passwdに暗号化した値をセットする。暗号化 ⇒ HEX
INSERT INTO sample_tbl(pass)
VALUES (HEX(AES_ENCRPYT(‘パスワード〇’, 任意の暗号化キー)));
復号化して取得する。UNHEX ⇒ 復号化 ⇒ UTF-8
SELECT CONVERT(AES_DECRYPT(UNHEX(passwd, 任意の暗号化キー) USING utf8)
FROM sample_tbl;