TFDSQLiteSecurity修改密码疑问:已连接时无需验证原密码?
TFDSQLiteSecurity ChangePassword 旧密码验证问题解答
是的,必须先将TFDConnection::Connected设为false,再调用TFDSQLiteSecurity::ChangePassword()才能触发旧密码验证,这属于FireDAC针对SQLite的设计行为。
原因在于:当TFDConnection处于已连接状态时,SQLite数据库已经通过正确的旧密码完成解密并处于开放状态。此时FireDAC执行ChangePassword操作时,直接针对已打开的数据库文件修改密码,不会再次校验旧密码——毕竟连接阶段已经完成了身份验证,后续的密码变更操作默认信任当前连接的合法性。
文档中提到的“ChangePassword()方法需同时提供旧密码与新密码”,是针对未连接状态下的修改场景:此时数据库处于加密关闭状态,必须通过旧密码完成解密后,才能执行密码变更操作,因此旧密码的校验是强制的。
正确的密码修改流程(需验证旧密码时):
- 先将
TFDConnection::Connected设置为false - 给
TFDSQLiteSecurity::OldPassword赋值原有效密码 - 给
TFDSQLiteSecurity::NewPassword赋值新密码 - 调用
TFDSQLiteSecurity::ChangePassword() - 后续重新连接数据库时使用新密码
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

