C#.Net 9.0 SQLite 暗号化DBに接続する

C#.Net 9.0 で作業中に調べた件について、まとめておきます。接続についえは、基本 8.0と同じなので過去の記事からどうぞ。

Biginners!

SQLitePCLRaw.bundle_e_sqlite3」これ以外のって?と思いませんでした?

SQLitePCLRaw.bundle_e_sqlite3すべてのプラットフォームで同じバージョンの SQLite を提供
SQLitePCLRaw.bundle_e_sqlcipher非公式の SQLCipher を提供
SQLitePCLRaw.bundle_greenbundle_e_sqlite3 と同じ。ただiOS の場合はシステム SQLite ライブラリが使用される。
SQLitePCLRaw.bundle_sqlite3システム SQLite ライブラリが使用されます。
SQLitePCLRaw.bundle_winsqlite3Windows 10 のシステム SQLite ライブラリである winsqlite3.dll が使用されます。
SQLitePCLRaw.bundle_zeteticZetetic の公式の SQLCipher ビルドが使用されます
目次

暗号化されたDBに接続するには?

STEP
「NuGetパッケージの管理」

ソリューションエクスプローラーのプロジェクト名を右クリックし、「NuGetパッケージの管理」をクリックします。

STEP
「Microsoft.Data.Sqlite.Core」をインストール

「参照」の検索バーに「Microsoft.Data.Sqlite」と検索し、表示された「Microsoft.Data.Sqlite.Core」をインストールしてください。

STEP
「SQLitePCLRaw.bundle_e_sqlcipher」をインストール

これも一緒にいれておかないとエラーになります。
System.Exception: ‘You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling

SQLCipherの場合です

コネクションについて

internal static readonly string ConnectionString = new SqliteConnectionStringBuilder(@"Data Source=C:\****.db")
{
    Mode = SqliteOpenMode.ReadWriteCreate,
    Password = "pass"
}.ToString();

using (var connection = new SqliteConnection(connectionString))
{

}

こんな感じで接続することが可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コスト最小で制作をしたいという意識強め(笑)

コメント

コメント一覧 (2件)

  • SQLitePCLRaw.bundle_e_sqlcipher は、SQLitePCLRaw バージョン 3.0 のリリース時に非推奨(deprecated)となりました。今後は、SQLitePCLRaw.bundle_e_sqlcipherの使用を回避する必要が出てくると思います。
    以下の代替方法で、sqlcipher を用いた暗号化SQLiteの運用が出来ることを確認済みです。
    もし良ければトライしてみてください。

    – OpenSSL を静的にリンクした sqlcipher (community edition) を独自ビルドする。
    – 以下の3種のパッケージを nuget でインストールする
    – Microsoft.Data.Sqlite.Core 10.0.0
    – SQLitePCLRaw.core 3.0.2
    – SQLitePCLRaw.provider.sqlcipher 3.0.2 または SQLitePCLRaw.provider.dynamic_cdecl 3.0.2
    – Main()の1番最初に以下の2行を挿入
    SQLitePCL.raw.SetProvider(new SQLite3Provider_sqlcipher()); //プロバイダをセット
    SQLitePCL.raw.FreezeProvider(); //プロバイダを固定

    [注意事項: sqlcipher.dll自体は C# ではない]
    sqlcipher.dllは、ソリューションエクスプローラーの[参照の追加]で追加できませんのでご注意ください。生成予定の .exe ファイルと同じフォルダに、sqlcipher.dll を格納する必要があります。

    [注意事項: ライセンス]
    OpenSSLはヴァージョンによりライセンスの種類が異なります。ライセンス的には、Apache License 2.0である OpenSSL 3.0 以降(最新ヴァージョンはおそくら 3.6.0 です)をリンクするのが、運用しやすいのではないかと思いますが、プロジェクトに使用する各APIのライセンスに整合性がとれているか、確認する必要があると思います。

    • コメントありがとうございます、とても助かります!

      SQLitePCLRaw 3.0 で bundle_e_sqlcipher が非推奨になっていたんですね。恥ずかしながら気づいていませんでした。記事はまさにそのパッケージ前提で書いているので、これは早めに見直さないといけないですね。

      代替の手順も、ここまで具体的に書いていただいて本当に助かりました。OpenSSL を静的リンクした sqlcipher を自前ビルドして、core と provider.sqlcipher(dynamic_cdecl でも可)の 3.0.2 を入れ、Main の先頭で SetProvider → FreezeProvider する、という流れですね。sqlcipher.dll は「参照の追加」ではなく exe と同じフォルダに置く、というのもハマりやすいポイントだと思うので、しっかりメモしました。

      自前ビルドはひと手間かかりますが、そのぶん余計なコストがかからないのは、このブログの趣旨にも合っていてありがたいです。OpenSSL のライセンスの話も正直あまり意識できていなかったので勉強になりました。3.0 以降が Apache License 2.0 なんですね。使う API との整合も含めて確認してみます。
      貴重な情報をありがとうございました!

コメントする

目次