FireDACによるSQLiteデータベースの暗号化

提供: Support
移動先: 案内検索

概要

FireDACでは、SQLiteデータベースを暗号化する機能がサポートされています。XE5以前のバージョンのFireDACでも、この機能は利用できますが、今回紹介する記事は、XE5のFireDACを対象といたします。

FireDACで利用可能な暗号化モードの種類は、以下の通りです。

  • aes-128
  • aes-192
  • aes-256
  • aes-ctr-128
  • aes-ctr-192
  • aes-ctr-256
  • aes-ecb-128
  • aes-ecb-192
  • aes-ecb-256

FireDACでは、暗号化モードのデフォルトは、「aes-256」です。

暗号化するための前準備

FireDACでSQLiteデータベースの暗号化を管理するためには、TFDSQLiteSecurityコンポーネントを利用します。

このコンポーネントを利用すると、データベースの暗号化、データベースの復号化、暗号化されたデータベースのパスワードの変更といった操作が行えます。TFDSQLiteSecurityコンポーネントは、ツールパレットの[FireDAC Services]というカテゴリに配置されています。

Thumb03000092ujpn.jpg

図1: TFDSQLiteSecurityコンポーネントの配置とDriverLinkの設定

図1のようにTFDSQLiteSecurityコンポーネントをフォームやデータモジュールへ配置し、オブジェクトインスペクタで、TFDSQLiteSecuritのDriverLinkプロパティにSQLiteのデータベースドライバ(TFDPhysSQliteDriverLink)を設定してください。

データベースを暗号化する

FireDACでSQLiteデータベースを暗号化するには、以下のようにコーディングします。

Delphiの場合:

FDSQLiteSecurity1.Database := '...'; 
FDSQLiteSecurity1.Password := '<暗号化モード>:<パスワード>'; 
FDSQLiteSecurity1.SetPassword;

C++Builderの場合:

FDSQLiteSecurity1->Database = "..."; 
FDSQLiteSecurity1->Password = "<暗号化モード>:<パスワード>"; 
FDSQLiteSecurity1->SetPassword();

但し、Passwordプロパティに指定するパスワードは、暗号化モードとパスワードを:(コロン)で連結した組み合わせの文字列を設定する必要があります。

例えば、

-SQLiteデータベースファイルの絶対パスが "C:\Users\Public\Documents\Sample.db"
-暗号化モードが "aes-128"
-パスワードが "12345"

の場合は、以下のように記述します。

Delphiの場合:

FDSQLiteSecurity1.Database := 'C:\Sample.db'; 
FDSQLiteSecurity1.Password := 'aes-128:12345'; 
FDSQLiteSecurity1.SetPassword;

C++Builderの場合:

FDSQLiteSecurity1->Database = "C:\\Users\\Public\\Documents\\Sample.db"; 
FDSQLiteSecurity1->Password = "aes-128:12345"; 
FDSQLiteSecurity1->SetPassword();

データベースを復号する

暗号化されたSQLiteデータベースをFireDACで復号化するには、以下のようにコーディングします。

Delphiの場合:

FDSQLiteSecurity1.Database := '...'; 
FDSQLiteSecurity1.Password := '<暗号化モード>:<パスワード>'; 
FDSQLiteSecurity1.RemovePassword;

C++Builderの場合:

FDSQLiteSecurity1->Database = "..."; 
FDSQLiteSecurity1->Password = "<暗号化モード>:<パスワード>"; 
FDSQLiteSecurity1->RemovePassword();

なお、Passwordプロパティに設定するパスワードは、データベースの暗号化と同じく暗号化モードとパスワードを:(コロン)で連結した組み合わせの文字列になります。そして、復号化で設定するパスワードは、必ずデータベースを暗号化する際に指定したパスワードを入力してください。

暗号化したデータベースへ接続する

FireDACで暗号化されたSQLiteデータベースへアクセスするには、TFDConnectionのParamsプロパティの接続パラメータである”Password”と”Encrypt”にデータベースを暗号化する際に設定したパスワードと暗号化モードを指定します。

例えば、暗号化モードが”aes-128”、パスワードが”12345”でSQLiteデータベースを暗号化した場合は、以下のようにコーディングします。

Delphiの場合:

FDConnetcion1.Params.Add := 'Encrypt=aes-128'; 
FDConnetcion1.Params.Add := 'Password=12345';

C++Builderの場合:

FDConnetcion1->Params->Add = "Encrypt=aes-128"; 
FDConnetcion1->Params->Add = "Password=12345";

またTFDConnetionの接続エディタで設定する場合は、以下の図の通りです。

Thumb03000093ujpn.jpg

図2: FireDAC 接続エディタ

エラーメッセージ

FireDACで暗号化されたSQLiteデータベースへ接続すると、様々なエラーが発生することがあります。そのエラーメッセージの例をいくつか紹介いたします。


  • [FireDAC][Phys][SQLite] ERROR: Cipher: DB is not encrypted

暗号化されていないデータベースに対して、復号化しようとすると発生します。


  • [FireDAC][Phys][SQLite] ERROR: file is encrypted or is not a database

既に暗号化されている、あるいは暗号化モードが異なるパスワードを指定すると発生します。


  • [FireDAC][Phys][SQLite] ERROR: Cipher: Invalid password is specified or DB is corrupted

データベースの復号時や暗号化されたデータベースへの接続時に、指定するパスワードが間違っていると発生します。

参考情報