HarmonyOS 鸿蒙Next 关系型数据库加密后,切换多个数据库查询异常问题
HarmonyOS 鸿蒙Next 关系型数据库加密后,切换多个数据库查询异常问题
问题:
使用多个关系型数据库时,若未开启加密,切换多个数据库进行查询、插入数据,一切都正常。若开启了加密,切换多个数据库后,只有最后一个数据库可以进行查询,其他查询不到数据,但是还可以进行数据插入。
测试demo可以重现:https://gitee.com/mchangtian/relational-store-application
已提单,官方说Next版本将修复。仅以此帖记录下,方便出现同样问题的朋友。
更多关于HarmonyOS 鸿蒙Next 关系型数据库加密后,切换多个数据库查询异常问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
仔细测了一下你的demo,结果如下:
1、由于你在初始化DB时用的是参数变量,因此编译不受影响可过; 2、未开加密时一切正常,分别对三个数据库依次插入一个,两个,三个记录,插入数据后查询按预期显示插入的记录;将数据库文件导出到公共目录再导出到电脑用sqlite3命令行查询数据也正常显示明文数据;未加密时沙箱数据库目录中每个DB有三个文件: name.db, name.db-shm, name.db-wal;空数据库三个文件有个初始大小分别为 4096, 32768, 20632;添加记录后 name.db-wal文件会变大,应该是缓存文件临时保存数据变化;在电脑上用sqlite3打开后数据会自动合并到name.db并且.db-shm和.db-wal会被删除;
3、开加密后查询、插入数据对三个数据库全部出现报错:Failed to get RdbStore. Code:14800010, message:Failed open database, invalid database name。
错误代码和我直接创建加密DB一样,这样看来加密数据库在创建阶段即出错;加密开启后创建DB只能出现name.db一个文件,且大小为0,查询和插入数据操作均在几秒后报错同上;
我在demo中添加了一些功能可以显示沙箱中数据库目录下的数据库文件,切换时数据库文件确实被清理了,因此排除开启加密时打开的是非加密数据库可能;
==》开启加密后我对三个数据库分别插入数据各一次,然后查看沙箱中数据库文件,再依次查询三个数据库,日志结果如下;数据库文件查询也显示全部为0 Bytes;详见附图。
测试结果显示加密开启数据库并无法正常操作,你前面提到说有最后一个加密数据库可使用是如何确认?能插入数据并查询显示出插入的记录吗?虽然对API 9下用加密数据库不报太大希望,不过还是想确认一下,谢谢!
能插入数据并查询显示出插入的记录,由此确定最后一个加密数据库可使用。
有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html
那就神奇了哈。。。有无测试过NEXT下是否可正常如不加密状态?
看了Gitee上的Demo,看到加密开启选项用了 encrypt: encrypt
,且是对HOS API 9,可是这样写IDE根本通不过,直接报类型不匹配错误,所以很奇怪你是怎么测试出加密数据库的?开了工单咨询数据库加密,说是API 9中是无法开启,为已知问题,NEXT中修复,因此更奇怪这Demo怎么跑起来的。。。还请不吝赐教。。。
能编译通过啊,你是直接拉的我的源码试验的吗?我提的问题是加密数据库切换几次查询之后,只有最后一个加密数据库能使用。
是否用的是OpenHarmony SDK,HOS SDK中开启数据库加密的格式是 encrypt: true
, 而非 encrypt: encrypt
。API 9 下 DevEco Studio 3.1.0.501 环境,用后者 IDE 就不认;用前者就报错;不开没事。我再试试用整个 Demo 跑跑,被这个官方说的不可行给整蒙了。
@State encrypt: boolean = false;
encrypt这个参数就是boolean 类型的。demo里面,我是用来绑定Toggle的状态,按钮切换的时候这个值会变。方便通过界面控制数据库的加密或不加密。
问一下你这个加密是数据库创建时就设置加密还是自行对插入数据库的数据进行加密?按文档看数据库在创建时就指定了加密配置,且不可更改。你这开启加密是重新创建数据库吗?
另,文档说只要改一下数据库配置变量STORE_CONFIG中的encrypt: true 即可将数据库变成加密数据库,可是改后连getRdbStore()都无法进行,报错说是 invalid database name,用 encrypt: false 就一切正常。不知你是不是用这个 encrypt: true 开启加密?
在HarmonyOS鸿蒙Next中,关系型数据库加密后切换多个数据库查询可能会出现异常,主要原因是加密数据库的密钥管理和切换逻辑未正确处理。每个加密数据库需要独立的密钥进行加解密操作,若在切换数据库时未正确应用相应的密钥,会导致解密失败或数据读取异常。
解决方案包括:
- 确保每个加密数据库的密钥在切换时正确加载和应用。
- 在切换数据库前,检查并确保当前数据库的密钥已正确释放,避免密钥冲突。
- 使用统一的密钥管理机制,确保在数据库切换时密钥能够自动切换。
若问题仍未解决,建议检查数据库切换和密钥管理的代码逻辑,确保其符合鸿蒙Next的数据库操作规范。