加密 SQLITE 数据库并在 windows VCL 应用程序中将其与 FireDac 一起使用

Encrypt SQLITE database and use it with FireDac in a windows VCL application

我正在使用 C++ 生成器编写 Windows VCL 桌面。该应用程序使用 Firedac 和 SQLite 数据库。

我想保护这个 SQLite 数据库:

到目前为止,我发现我能做的最简单的事情是 加密,你做到这一点,任何没有正确密码的人都会收到类似“”的消息此文件不是数据库" 如果他试图打开它。

是的,我们可以使用 Embarcadero VCL 做到这一点,doc. 使用 TFDSQLiteSecurity 组件和这些行:

FDSQLiteSecurity1->Password = "";/* we are protecting (encrypting) our uncyphered database*/
FDSQLiteSecurity1->ToPassword = 'newpassword';   
FDSQLiteSecurity1->ChangePassword();

很遗憾,VCL Firedac 应用程序无法连接到加密的 sqlite 数据库,因此它必须先对其进行解密。

为了让事情正常进行,我的程序启动并解密数据库(删除密码),然后它连接到数据库并使用它。完成后我再次重新加密数据库(关闭应用程序时)。

问题: 在此期间(我的程序启动并且 运行 和未加密的数据库)我可以阻止其他程序打开 SQLITE 数据库吗?有没有更好的方法,我欢迎任何建议

一旦它被 FireDac 加密,只需在 FDConnection 上设置适当的属性。密码是 password,加密方法是 encrypt

Firedac 可以打开一个 SQLite 数据库,它已自行加密,因此问题可以通过这样做作为一种更好的方法自行解决。其他程序只能看到磁盘上的加密版本,没有密码无法打开。