如何为sqlite3.exe提供密码?

时间:2011-07-11 18:42:50

标签: sqlite encryption

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

3 个答案:

答案 0 :(得分:1)

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

pragma integrity_check;

有关此pragma的详细信息,请参阅http://www.sqlite.org/pragma.html#pragma_integrity_check

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

答案 1 :(得分:0)

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

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

假设您遇到了损坏(并且不仅仅是传递了错误的文件,或者使用了错误的SQLite版本),您可能需要查看您正在使用的PRAGMA synchronous设置,并查看{{3} }。

答案 2 :(得分:0)

结帐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()
希望有所帮助。