FireDACでは、暗号化モードのデフォルトは、「aes-256」です。
在FireDAC中,加密模式的默认值为“aes-256”。
暗号化するための前準備
FireDACでSQLiteデータベースの暗号化を管理するためには、TFDSQLiteSecurityコンポーネントを利用します。
要在FireDAC中管理SQLite数据库的加密,请使用TFDSQLiteSecurity组件。
このコンポーネントを利用すると、データベースの暗号化、データベースの復号化、暗号化されたデータベースのパスワードの変更といった操作が行えます。TFDSQLiteSecurityコンポーネントは、ツールパレットの[FireDAC Services]というカテゴリに配置されています。
此组件可用于加密数据库、解密数据库和更改加密数据库的密码。TFDSQLiteSecurity组件位于工具选项板的“FireDAC Services”类别中。
図1: TFDSQLiteSecurityコンポーネントの配置とDriverLinkの設定-图1:放置TFDSQLiteSecurity组件并设置驱动程序链接
図1のようにTFDSQLiteSecurityコンポーネントをフォームやデータモジュールへ配置し、オブジェクトインスペクタで、TFDSQLiteSecuritのDriverLinkプロパティにSQLiteのデータベースドライバ(TFDPhysSQliteDriverLink)を設定してください。
如图1所示,将TFDSQLiteSecurity组件放置在窗体或数据模块中,在对象检查器中,在TFDSQLiteSecurit的DriverLink属性中设置SQLite的数据库驱动程序(TFDPhysSQLiteDriverLink)。
データベースを暗号化する
FireDACでSQLiteデータベースを暗号化するには、以下のようにコーディングします。
要在FireDAC中加密SQLite数据库,请进行如下编码。
Delphiの場合:
FDSQLiteSecurity1.Database := '...';
FDSQLiteSecurity1.Password := '<暗号化モード>:<パスワード>';
FDSQLiteSecurity1.SetPassword;
C++Builderの場合:
FDSQLiteSecurity1->Database = "...";
FDSQLiteSecurity1->Password = "<暗号化モード>:<パスワード>";
FDSQLiteSecurity1->SetPassword();
但し、Passwordプロパティに指定するパスワードは、暗号化モードとパスワードを:(コロン)で連結した組み合わせの文字列を設定する必要があります。
例えば、
-SQLiteデータベースファイルの絶対パスが "C:UsersPublicDocumentsSample.db"
-暗号化モードが "aes-128"
-パスワードが "12345"
の場合は、以下のように記述します。
Delphiの場合:
FDSQLiteSecurity1.Database := 'C:Sample.db';
FDSQLiteSecurity1.Password := 'aes-128:12345';
FDSQLiteSecurity1.SetPassword;
C++Builderの場合:
FDSQLiteSecurity1->Database = "C:UsersPublicDocumentsSample.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の接続エディタで設定する場合は、以下の図の通りです。
図2: FireDAC 接続エディタ
エラーメッセージ
FireDACで暗号化されたSQLiteデータベースへ接続すると、様々なエラーが発生することがあります。そのエラーメッセージの例をいくつか紹介いたします。
连接到用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
データベースの復号時や暗号化されたデータベースへの接続時に、指定するパスワードが間違っていると発生します。
在解密数据库或连接到加密数据库时,如果指定的密码错误,则会发生这种情况。