【问题标题】:SQLite deleted data stays in database binary fileSQLite 删除的数据保留在数据库二进制文件中
【发布时间】:2019-11-28 20:02:41
【问题描述】:

我从 SQLite 数据库表中删除了数据。如果您在任何 SQL 管理器(例如 SQLiteStudio)中打开数据库文件,则删除的数据不存在,但如果您在文本编辑器(例如 notepad++)中打开数据库文件,则删除的数据是可见的。因此有可能恢复数据等。

例子:

在第一张图片中,SQLiteStudio 显示没有看到已删除的客户“Stan”。但在 Notepad++ 中打开的二进制文件显示客户“Stan”。

有人知道如何使已删除的数据从 SQLite 二进制文件中消失吗?

【问题讨论】:

    标签: sql database sqlite security


    【解决方案1】:

    为防止这种情况,请执行PRAGMA secure_delete = ON:

    当secure_delete 开启时,SQLite 会用零覆盖已删除的内容。 secure_delete 的默认设置由SQLITE_SECURE_DELETE 编译时选项确定,并且通常处于关闭状态。 secure_delete 的 off 设置通过减少磁盘 I/O 量来提高性能。希望避免在内容被删除或更新后留下取证痕迹的应用程序应在执行删除或更新之前启用secure_delete pragma,或者在删除或更新之后运行VACUUM

    【讨论】:

    • 正是我想要的!
    • 我有同样的问题 - 我从表中删除数据,运行 Vacuum 甚至执行 PRAGMA secure_delete=ON,但是当我断开连接并关闭我的 SQLite 编辑器时,-wal 和 -shm 文件仍然存在,当我删除它们时,如果我再次打开数据库,我的数据将返回到表中。如何让数据库中的数据永久删除?我需要将此数据库复制到移动设备,但无法删除数据
    • @Thys 那将是一个新问题。但请先阅读documentation
    【解决方案2】:

    这是大多数数据库的正常行为。 SQLite 也不例外。大多数时候,设计师更喜欢速度而不是碎片化。

    要使数据从您的文件中完全消失,您需要vacuum您的数据库。

    您可以使用pragma auto_vacuum=FULL 选项构建您的数据库,以使其对数据库本身进行真空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多