【これだけ】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で以下のコマンドを実行します。
この記事が気に入ったらサポートをしてみませんか?