2011-07-11 92 views
2

sqlite3.exeを使用して開きたいsqliteデータベースがあります。 "ファイルが暗号化されているかデータベースではありません"と言ってクエリを作成しようとするとエラーになります。これは愚かなように見えるかもしれませんが、私はインターネット上で見てきましたが、データベースを復号化するためにsqlite3.exeにパスワード(またはキー)を入力する方法は見つけられません。 sqlite3.exeの-helpオプションまたは.helpコマンドは、それを行うための何も表示しません...それを行うことは可能ですか?もしそうなら、どうすればいいですか?sqlite3.exeにパスワードを提供するには?

+0

ファイルが有効なsqliteデータベースであり、破損していないことを確認していますか? –

+0

誰かが電子メールで私にそれを送ってきたので、私は確信していませんが、有効な暗号化されたデータベースであれば、そのパスワードが何であるかを知っています。だから私はそれを検証したいのです。私がsqlite3にパスワードを提供しても、このエラーが発生した場合、データベースが壊れているというサインになりますが、今はパスワードの提供方法がわかりません。 – Carl

+0

それをメールで私に送った人は2週間休暇中ですから、どうやったらいいか尋ねることはできません。しかし、彼は私にパスワードをくれたので、私のデータベースは暗号化されていると思います。 – Carl

答えて

0

あなたが信じる理由がない限り、データベースは暗号化されることはありません。あなたはデータベースをまったく開くことができますか、あるいは何らかのSQLクエリーを発行したらこのエラーが出ますか?それが前者の場合、ファイルはおそらくsqlite dbで始まらないか、破損している可能性があります。それは後者だ場合は、を使用してDBの整合性を確認してください。

pragma integrity_check; 

このプラグマについての詳細はhttp://www.sqlite.org/pragma.html#pragma_integrity_checkを参照してください。

いずれにしても、dbが本当に暗号化されていない場合(sqliteはネイティブでサポートされていません)、dbはおそらく使用できません。

+0

一部のSQLクエリを発行するとエラーが表示されます。 SQLite3.exeは最初に私がsqlite3.exe myDBname.dbを実行すると文句を言うことはありません – Carl

+0

悲しいことに、私はsqliteがdbで実際に何かをするまで文句を言わないことを忘れていました。そのファイルを調べて、暗号化されているかどうかを確認できますか(メモ帳で開くなど)? –

+0

暗号化されたデータベースの外観はわかりませんが、判読できない文字がたくさんあります(たとえば、データベース内のテーブルの名前など)。 – Carl

0

SQLiteは実際にSQLiteデータベースではないファイル、または壊れているファイルを渡すとエラーを報告します。暗号化をサポートするいくつかのSQLiteアドオンがありますが、それ以外のSQLiteには暗号化がありません。

これは、SQLite v2でSQLite v3データベースを開こうとしたとき(および他のバージョンの不一致の可能性もあります)にも発生します。

あなたが破損を経験していると仮定すると、(ちょうど間違ったファイルを渡し、またはSQLiteのの間違ったバージョンを使用していない)、あなたが使用しているPRAGMA synchronous設定をチェックし、またthe list of fixed data-corrupting bugsを確認することをお勧めします。

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() 

希望のコードです。

関連する問題