You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SQLite Maestro可打开加密SQLite库,FireDAC却提示密码无效/库损坏?

解决FireDAC无法打开SQLite Maestro加密数据库的问题

我之前也碰到过一模一样的情况,问题核心基本是加密配置不匹配——SQLite Maestro和FireDAC对SQLite加密的默认参数、算法支持存在差异,导致FireDAC无法正确解析加密后的数据库文件。下面是具体的排查和解决步骤:

1. 明确加密算法,补充FireDAC参数

SQLite Maestro通常默认使用SQLCipher作为加密扩展,但FireDAC不会自动识别这个加密类型,你需要手动在连接参数里指定加密相关配置:

object FDConnection1: TFDConnection
  Params.Strings = (
    'Database=C:\myapps\mydb.db'
    'Password=mypass'
    'DriverID=SQLite'
    'Cipher=SQLCipher'  // 指定使用SQLCipher加密标准
    'KeyDerivation=PBKDF2'  // 匹配SQLite Maestro默认的密钥推导方式
    'Legacy=1'  // 若你的数据库是SQLCipher v3及更早版本,必须开启此参数
  )
  LoginPrompt = False
  Left = 48
  Top = 16
end

2. 检查密钥的实际处理逻辑

有些工具会对明文密码做额外处理(比如SHA-256哈希、加盐)后再作为加密密钥,而FireDAC默认直接使用明文密码。你可以:

  • 在SQLite Maestro的数据库属性里查看加密设置,确认是否对密码做了哈希或加盐处理
  • 如果是哈希后的密钥,直接把哈希值填入FireDAC的Password参数,而不是原明文密码

3. 确认FireDAC使用带加密支持的SQLite库

默认的FireDAC SQLite驱动可能不带加密扩展,你需要验证:

  • 检查Delphi安装目录下的sqlite3.dll是否是编译了SQLCipher的版本
  • 如果不是,替换为支持加密的SQLite动态库(比如从SQLCipher官方编译的适配版本)

4. 验证数据库完整性与密码有效性

可以先通过SQLite Maestro把加密数据库导出为未加密版本,用FireDAC尝试打开,确认数据库本身没有损坏;再用FireDAC重新加密这个未加密库,用SQLite Maestro打开对比参数,快速定位是密码问题还是配置问题。

内容的提问来源于stack exchange,提问作者zac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:55:20