[DBMoto]データを暗号化し保存するデータベース移行方法

DBMotoは異種データベース間リアルタイムレプリケーションツールです。複製元テーブルにデータの更新があった場合、更新されたデータを複製先テーブルにリアルタイムで反映することができます。このレプリケーションの機能では、スクリプトを設定しデータを加工することも可能です。本記事ではスクリプトを活用し、テーブル内のデータを暗号化してレプリケーションを行う手法を3ステップでご紹介します。

手順1. 暗号化関数の作成

DBMotoでは、C#/VBでスクリプトを記述できます。下記はAES方式の暗号化を行う関数を実装するスクリプトです。こちらをDBMotoのグローバルスクリプトに記述します。

[c language=”#”]
using System;
using System.Data;
using DBMotoPublic;
using DBMotoScript;

using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace DBRS{

public class GlobalScript : IGlobalScript{

public static string Encrypt(string text, string iv, string key){
using (RijndaelManaged myRijndael = new RijndaelManaged()){
myRijndael.BlockSize = 128;
myRijndael.KeySize = 128;
myRijndael.IV = Encoding.UTF8.GetBytes(iv);
myRijndael.Key = Encoding.UTF8.GetBytes(key);

ICryptoTransform encryptor = myRijndael.CreateEncryptor(myRijndael.Key, myRijndael.IV);

byte[] encrypted;
using (MemoryStream mStream = new MemoryStream()){
using (CryptoStream ctStream = new CryptoStream(mStream, encryptor, CryptoStreamMode.Write)){
using (StreamWriter sw = new StreamWriter(ctStream)){
sw.Write(text);
}
encrypted = mStream.ToArray();
}
}
return (System.Convert.ToBase64String(encrypted));
}
}
}
}
[/c]

手順2. マッピングの設定

レプリケーションを作成する際、複製先テーブルのカラムと複製元テーブルのカラムの紐付けを行うマッピング設定があります。このマッピング設定でグローバルスクリプトに記載した関数を使用するよう設定します。下記画像では、mailカラムのレプリケーションに対し暗号化を行うEncrypt関数が設定されています。

手順3. レプリケーションの実行

関数を設定したレプリケーションを実行します。Encrypt関数を設定したカラムのデータが複製先テーブルで暗号化されていることが確認できます。

DBMotoではスクリプトを併用することで簡単にデータを暗号化された状態でレプリケーションすることが出来ます。個人情報や大切なデータを保管したデータベースのデータ移行や連携等で、ぜひDBMotoをご検討ください。

※同じように復号する関数を用意頂き、マッピング設定で復号の関数を記述いただければ、暗号化したデータを元に戻すことも出来ます。復号方法はこちらの記事をご覧ください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です