スレーブでデータを自動的に暗号化する

トリガを使ってスレーブで自動的にデータを暗号化してみる。


テーブルはこんな感じ。

CREATE TABLE `hoge` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `value` text,
  PRIMARY KEY (`id`)
)


スレーブ側でトリガを準備。

DELIMITER //
CREATE TRIGGER encrypt_value_before_insert BEFORE INSERT ON hoge
FOR EACH ROW
BEGIN
  SET NEW.value = AES_ENCRYPT(NEW.value, 'jugemujugemu');
END;
//
DELIMITER ;
DELIMITER //
CREATE TRIGGER encrypt_value_before_update BEFORE UPDATE ON hoge
FOR EACH ROW
BEGIN
  SET NEW.value = AES_ENCRYPT(NEW.value, 'jugemujugemu');
END;
//
DELIMITER ;


マスタでデータを入れてみる。


master> insert into hoge (value) values ('momotarou');
Query OK, 1 row affected (0.02 sec)

master> insert into hoge (value) values ('kintarou');
Query OK, 1 row affected (0.01 sec)

master> select * from hoge;

                                  • +

| id | value |

                                  • +

| 1 | momotarou |
| 2 | kintarou |

                                  • +

スレーブで確認。


slave> select * from hoge;

                                                                          • +

| id | value |

                                                                          • +

| 1 | ツャ?テ嘉・1cN窶督キテ▒ナ停拆窶▒ ティ |
| 2 | 窶▒(テ禿ケ_Yナ津▒1テ▒cツイツシ |

                                                                          • +

2 rows in set (0.00 sec)

slave> select id, aes_decrypt(value,'jugemujugemu') from hoge;

                                                                                  • +

| id | aes_decrypt(value,'jugemujugemu') |

                                                                                  • +

| 1 | momotarou |
| 2 | kintarou |

                                                                                  • +

2 rows in set (0.00 sec)


マスタでデータを更新してみる。


master> update hoge set value = 'kaguyahime' where id = 2;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0

master> select * from hoge;

                                    • +

| id | value |

                                    • +

| 1 | momotarou |
| 2 | kaguyahime |

                                    • +

2 rows in set (0.00 sec)

スレーブで確認。


slave> select * from hoge;

                                                                          • +

| id | value |

                                                                          • +

| 1 | ツャ?テ嘉・1cN窶督キテ▒ナ停拆窶▒ ティ |
| 2 | テ岩露テーNテセテク{*ヒ▒<窶ケヒ▒テ▒ |

                                                                          • +

2 rows in set (0.00 sec)

slave> select id, aes_decrypt(value,'jugemujugemu') from hoge;

                                                                                  • +

| id | aes_decrypt(value,'jugemujugemu') |

                                                                                  • +

| 1 | momotarou |
| 2 | kaguyahime |

                                                                                  • +

2 rows in set (0.00 sec)