【问题标题】:How to provide password to sqlite3.exe?如何为 sqlite3.exe 提供密码?
【发布时间】:2011-07-12 02:53:22
【问题描述】:

我有一个要使用 sqlite3.exe 打开的 sqlite 数据库。现在,当我尝试进行查询时出现错误,说“文件已加密或不是数据库”。这可能看起来很愚蠢,但我一直在互联网上四处寻找,只是找不到如何为 sqlite3.exe 提供密码(或密钥)来解密数据库。 sqlite3.exe 的 -help 选项或 .help 命令没有显示任何可以执行此操作的操作...是否可以这样做,如果可以,我该怎么做?

【问题讨论】:

  • 您确定该文件是有效的 sqlite 数据库并且没有损坏吗?
  • 我不确定,因为有人通过电子邮件将其发送给我,但如果它是有效的加密数据库,我知道密码应该是什么。这就是为什么我要验证它。如果我向 sqlite3 提供了密码,但仍然出现此错误,则表明数据库已损坏,但目前我还没有找到如何提供密码。
  • 通过电子邮件发送给我的那个人正在休假 2 周,所以我不能问他该怎么做。但是他给了我一个密码,所以我想我的数据库是加密的。

标签: sqlite encryption


【解决方案1】:

除非您有理由相信,否则数据库不太可能被加密。您是否能够打开数据库,或者一旦您发出一些 SQL 查询,您是否会收到此错误?如果是前者,那么您的文件可能不是一开始的 sqlite db,或者它已损坏;如果是后者,请检查您的数据库的完整性:

pragma integrity_check;

有关此编译指示的更多信息,请参阅http://www.sqlite.org/pragma.html#pragma_integrity_check

在任何情况下,除非您的数据库真正加密(sqlite 本身不支持),否则您的数据库可能无法使用。

【讨论】:

  • 一旦我发出一些 SQL 查询,就会收到错误消息。如果我执行 sqlite3.exe myDBname.db,SQLite3.exe 一开始不会抱怨
  • 是的,对不起,我忘记了 sqlite 不会抱怨,直到它真正对数据库做了一些事情。你能检查那个文件,看看它是否看起来是加密的(比如用记事本打开它)?
  • 我不知道加密的数据库应该是什么样子,但是有很多不可读的字符,并且不时有我认识的名称(例如,在数据库)。
  • 我想这意味着数据库没有加密,只是损坏了对吧?
  • 如果您识别表名,我会假设您的数据库未加密,至少整体上未加密。在这一点上,我最好的猜测是电子邮件传输与文件混淆。如果你在某个地方有 linux,你可以随时归档它:“file the_db_file”
【解决方案2】:

当您向 SQLite 传递一个实际上不是 SQLite 数据库或已损坏的文件时,SQLite 会报告该错误。有几个 SQLite 插件支持加密,但除此之外 SQLite 没有加密。

当您尝试使用 SQLite v2 打开 SQLite v3 数据库时也会发生这种情况(并且可能是其他版本不匹配)。

假设您遇到了损坏(不仅仅是传递了错误的文件,或者使用了错误的 SQLite 版本),您可能需要检查您正在使用的PRAGMA synchronous 设置,并查看the list of fixed data-corrupting bugs

【讨论】:

    【解决方案3】:

    查看此forum here。那家伙和你有同样的问题。问题是 sqlite3 API 中没有作为标准包提供任何形式的保护,但您可以尝试System.Data.SQLite。这些是贴在论坛上的代码:

    #include <SQLite.au3>    don't include sqlite.dll.au3 !!!
    
    _SQLite_Startup ("System.Data.SQLite.dll")
    ConsoleWrite(_SQLite_LibVersion() & @LF)
    _SQLite_Open("testcrypt.db")
    _SQLite_Exec(-1, "pragma key = 'Radu is happy!';create table if not exists test (id integer, val text);" & _
                    "insert into test values (1, 'abc');")
    Local $row
    _SQLite_QuerySingleRow(-1, "select * from test;", $row)
    ConsoleWrite($row[1] & @LF)
    _SQLite_Close()
    _SQLite_Shutdown()
    

    希望有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-19
      • 2015-05-30
      • 2016-01-10
      • 2014-02-11
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多