2009-06-12 9 views
5

私は、私が挿入/選択するpythonでsqlite3のDBを持っています。アプリは素晴らしいですが、私はそれを微調整して誰もパスワードなしでDBから読むことはできません。どのように私はこれをPythonで行うことができますか?私はどこから始めるべきかわからないことに注意してください。暗号化されたファイルまたはdb in python

答えて

1

SQLiteデータベースは人間が読める形式であり、組み込みの暗号化はありません。

誰かがデータベースファイルに直接アクセスして読んだり、プログラムからアクセスしたりするのを心配していますか?

私は前者を想定しています。なぜなら後者は実際にデータベースに関連していないからです。それはあなたのアプリケーションのセキュリティです。

いくつかのオプションが頭に浮かぶ:

  1. ファイルシステムのアクセス権ではなく、暗号化してDBを保護します。あなたはあなたの環境が何であるかを言及していないので、これがあなたのために実行可能かどうかは言えませんが、読めないものを解読できないので、おそらく最も簡単で信頼性の高い方法です。
  2. 書き込みの前にPythonで暗号化し、読み込み後にPythonで復号化します。かなりシンプルですが、SQLのセットベースのマッチング操作の大部分を失います。
  3. 別のデータベースに切り替えます。ユーザー認証とアクセス許可は、ほとんどのマルチユーザーデータベースの標準機能です。ツールの限界にぶつかると、新しい機能を現在のツールにハックするのではなく、他のツールを見回す方が簡単かもしれません。
+0

sqliteはデスクトップアプリケーション用に軽量であるため私は他のデータベースを使用できないことを除いて同じ質問があります(専用ジャーナルソフトウェア) –

9

SQLCipherを使用できます。 SQLiteの

SQLCipherため

http://sqlcipher.net/

オープンソースのフルデータベース暗号化は、データベースファイルの透明256ビットのAES暗号化を提供してSQLiteの拡張機能です。ページはディスクに書き込まれる前に暗号化され、読み取られると解読されます。フットプリントが小さくパフォーマンスも優れているため、組み込みアプリケーションデータベースを保護するのに最適で、モバイル開発に適しています。データベースファイル内のデータの

  • 100%が暗号化されている多くの操作上の 暗号化のために、わずか5〜15%程度のオーバーヘッドで高速なパフォーマンスブレイジング

    1. は プラクティス(CBCモード、鍵導出)優れたセキュリティを使用
    2. ゼロコンフィギュレーションとアプリケーションレベルの暗号化広範なプラットフォーム
    3. サポート:C/C++、Obj-C、QT、Win32/.NET、Java、Python、 RubyなどWindows、Linux、iPhone/iOS ...
  • +6

    Pythonから作業しますか? – Michael

    1

    私は同じ問題を抱えていました。私のアプリケーションでは、複数のインスタンスが同時に実行されている可能性があります。このため、私はsqliteのdbファイルを暗号化するだけで済みません。私はまた、この状態でデータベースで深刻なデータ操作を行うことはできないので、Pythonでデータを暗号化することは良い考えであるとは思わない。念頭に置いて、これらの制約に

    、私は、次の2つの解決策が出ている:

    1)は、前述のSQLCipherを使用してください。私がここに見る問題は、Python用の独自のバインディングを作成し、自分でコンパイルする(または料金を支払う)必要があるということです。いずれにしても、これは他のPython開発者のための素晴らしいソリューションになると思います。私が成功すれば、私は解決策を投稿します。

    2)オプション1がわかりにくい場合や、時間がかかりすぎる場合は、この方法を使用します。この方法は安全ではありません。 pycryptoを使用してデータベースファイルを暗号化します。データベースファイルを解読し、さまざまなクライアントからの要求を処理するSQL「サーバー」を実装します。未処理の要求がなければ、データベースを再暗号化します。これは全面的に遅くなり、データベースは一時的な復号化状態のままになります。

    これらのアイデアが次の人に役立つことを願っています。

    EDIT 2013年1月13日私はそれをコンパイルするために取得するように見えることができなかった、とコードベースがサウンドライブラリながら、あるOpenSSLを、使用しようとしているので、私はSQLCipherをあきらめ

    単純なAESのコードベースのかなり大量128。

    私は別のオプションwxSQLite3を見つけました。私はSQLite暗号化ピースを単離する方法を見つけました:https://github.com/shenghe/FreeSQLiteEncryption。私はこれをコンパイルして(SQLite3の最新バージョンで)動作させることができました。 wxSQLite3はAES 256もサポートしています。私の次のステップは、変更されたsqlite3.dllでpysqlite(Pythonに組み込まれているsqliteライブラリ)をコンパイルしようとすることです。それがうまくいくなら、wxSQLite3のsqlite3.dllの拡張暗号化部分をサポートするためにpysqliteを微調整します。いずれにせよ、私はこのスレッドを自分の結果で更新しようとします。成功した場合は、Githubにビルド手順を示す最終コードベースを投稿します。

    +0

    これに関するアップデートはありますか? – Thomas

    +0

    残念ながら、プロジェクトが失敗し、私はそれに戻ったことはありません。 – shellster

    2

    Frontwareが示唆しているように、sqlcipherを使用できます。

    pysqlcipher pythonパッケージは、拡張子をコンパイルするためにsqlcipherコードの組み合わせを使用するため、使いやすくすることができます。

    は、それはあなたがちょうど暗号プラグマを設定し、定期的なsqlite.dbapi2を使用するようpysqlcipher使用してだけの問題でなければなりません。

    関連する問題