DBMotoは異種データベース間リアルタイムレプリケーションツールです。複製元テーブルにデータの更新があった場合、更新されたデータを複製先テーブルにリアルタイムで反映することができます。このレプリケーションの機能では、スクリプトを設定しデータを加工することも可能です。本記事ではスクリプトを活用し、テーブル内のデータを暗号化してレプリケーションを行う手法を3ステップでご紹介します。
手順1. 暗号化関数の作成
DBMotoでは、C#/VBでスクリプトを記述できます。下記はAES方式の暗号化を行う関数を実装するスクリプトです。こちらをDBMotoのグローバルスクリプトに記述します。
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));
}
}
}
}
手順2. マッピングの設定
レプリケーションを作成する際、複製先テーブルのカラムと複製元テーブルのカラムの紐付けを行うマッピング設定があります。このマッピング設定でグローバルスクリプトに記載した関数を使用するよう設定します。下記画像では、mailカラムのレプリケーションに対し暗号化を行うEncrypt関数が設定されています。
手順3. レプリケーションの実行
関数を設定したレプリケーションを実行します。Encrypt関数を設定したカラムのデータが複製先テーブルで暗号化されていることが確認できます。
DBMotoではスクリプトを併用することで簡単にデータを暗号化された状態でレプリケーションすることが出来ます。個人情報や大切なデータを保管したデータベースのデータ移行や連携等で、ぜひDBMotoをご検討ください。
※同じように復号する関数を用意頂き、マッピング設定で復号の関数を記述いただければ、暗号化したデータを元に戻すことも出来ます。復号方法はこちらの記事をご覧ください。
関連したトピックス
- [DBMoto]暗号化したデータを復号し保存するデータ連携方法
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方⑤:フィールドマッピング関数の書き方
- テーブル一括作成やマッピングをカスタマイズ:グローバルスクリプト[Syniti Replicate]
- レプリケーションの際にnullを特定の値に変換する方法 その2【リアルタイムレプリケーションツールDBMoto】
- [DBMoto]関数を使用してレプリケーション時のデータを変換する方法(VB/C#言語選択、関数適用、ユーザ関数作成、置換関数、一括設定手順)
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方②:グローバルスクリプト
- 任意のデータ型でターゲットテーブル作成[DBMoto]
- [DBMoto API]外部からレプリケーションやグループを開始・停止するサンプルC#プログラム
- 2つのソーステーブルからターゲットの一つのレコードにレプリケーション
- 複数のテーブルにあるレコードを1つのテーブルへ統合する際の注意点【リアルタイムレプリケーションツールDBMoto】




RSSフィードを取得する