【これだけ】MySQLでのデータの暗号化【現役エンジニアが解説】

今回はMySQLでのデータの暗号化について、事例を交えて簡単に解説していきます。

カラムの暗号化

カラム単位でデータを暗号化したい場合には、基本的にはアプリケーション側で暗号化してからデータベースに保存します。

例えば、以下のusersテーブルがあると仮定し、nameのカラムを暗号化したいとします。

このケースでは、以下のようにSQLを実行する段階で既にカラム単位でデータを暗号化させておきます。

INSERT INTO (user_id, name) VALUES(4,'hIryJzVlZZDmSKwIil1ZLA==')

ただし、暗号化後は元の文字列に比べて非常に長くなってしまうため、テーブル定義で文字数を制限している場合には注意が必要です。

INSERT文やUPDATE文の実行時に、アプリケーション側で暗号化する際には、phpであれば、openssl_encrypt関数等を使うと良いでしょう。

一方、取得する際はいつもどおりのSELECT文で問題ありません。

SELECT user_id, name FROM users;

しかし、そのままではnameのカラムが暗号化されていますので、openssl_encrypt関数で暗号化したものなら、openssl_decrypt関数で複合化してから表示するようにしましょう。

テーブルの暗号化

テーブル全体でデータを暗号化する場合には、MySQLには透過的テーブルスペース暗号化という便利な機能があるため、これを利用すると良いでしょう。

この機能を使えば、MySQL標準の機能で暗号化してデータを保持くれるため、アプリケーション側で面倒な暗号化/複合化の処理を行う必要がありません。

この機能を使うためには、まず準備としてMySQLで以下のコマンドを実行します。

ここから先は

832字
この記事のみ ¥ 1,000

この記事が気に入ったらサポートをしてみませんか?