あわせて読みたい


C#.Net 8.0 SQLiteに接続する準備
SQLiteは軽量で小さなデータベースです。インストールが必要ないのでモバイルデバイスなどに使われているようです。性能面でも、十分に使えるレベルだと思います。 最大…
C#.Net 9.0 で作業中に調べた件について、まとめておきます。接続についえは、基本 8.0と同じなので過去の記事からどうぞ。
Biginners!「SQLitePCLRaw.bundle_e_sqlite3」これ以外のって?と思いませんでした?
| SQLitePCLRaw.bundle_e_sqlite3 | すべてのプラットフォームで同じバージョンの SQLite を提供 |
| SQLitePCLRaw.bundle_e_sqlcipher | 非公式の SQLCipher を提供 |
| SQLitePCLRaw.bundle_green | bundle_e_sqlite3 と同じ。ただiOS の場合はシステム SQLite ライブラリが使用される。 |
| SQLitePCLRaw.bundle_sqlite3 | システム SQLite ライブラリが使用されます。 |
| SQLitePCLRaw.bundle_winsqlite3 | Windows 10 のシステム SQLite ライブラリである winsqlite3.dll が使用されます。 |
| SQLitePCLRaw.bundle_zetetic | Zetetic の公式の 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 – Full Database Encryption for SQLite | Zetetic
SQLCipher is a SQLite extension providing transparent 256-bit AES full database encryption, used by thousands of applications on hundreds of millions of devices…
コネクションについて
internal static readonly string ConnectionString = new SqliteConnectionStringBuilder(@"Data Source=C:\****.db")
{
Mode = SqliteOpenMode.ReadWriteCreate,
Password = "pass"
}.ToString();
using (var connection = new SqliteConnection(connectionString))
{
}こんな感じで接続することが可能です。




コメント
コメント一覧 (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 との整合も含めて確認してみます。
貴重な情報をありがとうございました!