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


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をご検討ください。

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

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください