暗号化
SQLite では、既定により、データベース ファイルの暗号化はサポートされません。 代わりに、修正した SQLite バージョンの SEE、SQLCipher、SQLiteCrypt、wxSQLite3 などを使用する必要があります。 この記事では、SQLCipher のサポートされていないオープンソース ビルドの使用について説明しますが、他のソリューションにも当てはまります。これらも一般的に同じパターンに従っているためです。
インストール
dotnet remove package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
暗号化に別のネイティブ ライブラリを使用する場合の詳細については、「カスタム SQLite のバージョン」を参照してください。
キーを指定する
新しいデータベースで暗号化を有効にするには、Password
接続文字列キーワードを使用してキーを指定します。 SqliteConnectionStringBuilder を使用して、ユーザー入力の値を追加または更新し、接続文字列のインジェクション攻撃を回避します。
var connectionString = new SqliteConnectionStringBuilder(baseConnectionString)
{
Mode = SqliteOpenMode.ReadWriteCreate,
Password = password
}.ToString();
重要
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。
ヒント
既存のデータベースを暗号化および暗号化解除する方法は、使用しているソリューションによって異なります。 たとえば、SQLCipher では sqlcipher_export()
関数を使用する必要があります。 詳細については、ソリューションのドキュメントを参照してください。
データベースのキーを更新する
暗号化されたデータベースのキーを変更する場合は、PRAGMA rekey
ステートメントを実行します。
ただし、SQLite では PRAGMA
ステートメントのパラメーターはサポートされません。 代わりに、quote()
関数を使用して、SQL インジェクションを防止してください。
var command = connection.CreateCommand();
command.CommandText = "SELECT quote($newPassword);";
command.Parameters.AddWithValue("$newPassword", newPassword);
var quotedNewPassword = (string)command.ExecuteScalar();
command.CommandText = "PRAGMA rekey = " + quotedNewPassword;
command.Parameters.Clear();
command.ExecuteNonQuery();
.NET