こちらの記事では、データを暗号化しレプリケーションする方法をご紹介しました。本記事では、この暗号化したデータを復号してデータ連携を行う手法を3ステップでご紹介します。
手順1. 復号関数の作成
暗号化によるレプリケーションを紹介した時と同様に、DBMotoのグローバルスクリプトに復号を行うDecrypt関数を設定します。下記はAES方式の復号を行う関数を実装するスクリプトです。
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 Decrypt(string cipher, 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 decryptor = myRijndael.CreateDecryptor(myRijndael.Key, myRijndael.IV);
string plain = string.Empty;
using (MemoryStream mStream = new MemoryStream(System.Convert.FromBase64String(cipher))){
using (CryptoStream ctStream = new CryptoStream(mStream, decryptor, CryptoStreamMode.Read)){
using (StreamReader sr = new StreamReader(ctStream)){
plain = sr.ReadLine();
}
}
}
return plain;
}
}
}
}
手順2. マッピングの設定
レプリケーションを作成する際のマッピング設定にて、グローバルスクリプトに記載したDecrypt関数を使用するよう設定します。
もし、シンクロナイゼーションのレプリケーションモードで、複製先から複製元への逆方向の転送時に関数を設定したい場合には、下記画像の赤枠のアイコンをクリックします。これにより逆方向のマッピングが設定できます。
手順3. レプリケーションの実行
関数を設定したレプリケーションを実行します。Decrypt関数を設定したカラムのデータが複製先テーブルで復号されていることが確認できます。
このように関数を使用することで、暗号化されたデータを復号しデータベースに保存することが可能です。また、双方向差分転送モードのシンクロナイゼーションを利用することで、複製元では平文でデータを、複製先では暗号化したデータを保存するような運用も可能です。個人情報や大切なデータを保管したデータベースのデータ移行や連携等で、ぜひDBMotoをご検討ください。
関連したトピックス
- [DBMoto]データを暗号化し保存するデータベース移行方法
- 任意のデータ型でターゲットテーブル作成[DBMoto]
- テーブル一括作成やマッピングをカスタマイズ:グローバルスクリプト[Syniti Replicate]
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方②:グローバルスクリプト
- [DBMoto][スクリプト]カラムを結合・分割したレプリケーション
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方⑤:フィールドマッピング関数の書き方
- レプリケーションの際にnullを特定の値に変換する方法 その2【リアルタイムレプリケーションツールDBMoto】
- [DBMoto]関数を使用してレプリケーション時のデータを変換する方法(VB/C#言語選択、関数適用、ユーザ関数作成、置換関数、一括設定手順)
- 2つのソーステーブルからターゲットの一つのレコードにレプリケーション
- 複数のテーブルにあるレコードを1つのテーブルへ統合する際の注意点【リアルタイムレプリケーションツールDBMoto】




RSSフィードを取得する