Šifrování
SQLite ve výchozím nastavení nepodporuje šifrování databázových souborů. Místo toho musíte použít upravenou verzi SQLite, jako je SEE, SQLCipher, SQLiteCrypt nebo wxSQLite3. Tento článek ukazuje použití nepodporovaného opensourcového buildu SQLCipher, ale informace platí i pro jiná řešení, protože obvykle dodržují stejný vzor.
Instalace
dotnet remove package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Další informace o použití jiné nativní knihovny pro šifrování naleznete v tématu Vlastní verze SQLite.
Zadání klíče
Pokud chcete povolit šifrování v nové databázi, zadejte klíč pomocí klíčového Password
slova připojovací řetězec. Slouží SqliteConnectionStringBuilder k přidání nebo aktualizaci hodnoty ze vstupu uživatele a zabránění útokům prostřednictvím injektáže připojovací řetězec.
var connectionString = new SqliteConnectionStringBuilder(baseConnectionString)
{
Mode = SqliteOpenMode.ReadWriteCreate,
Password = password
}.ToString();
Důležité
Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Pokud se připojujete k Azure SQL, spravované identity pro prostředky Azure se doporučují metodou ověřování.
Tip
Metoda šifrování a dešifrování existujících databází se liší v závislosti na tom, jaké řešení používáte. Například je potřeba použít sqlcipher_export()
funkci v sqlCipheru. Podrobnosti najdete v dokumentaci k řešení.
Opětovné vytvoření klíče databáze
Pokud chcete změnit klíč šifrované databáze, zadejte PRAGMA rekey
příkaz.
SQLite bohužel nepodporuje parametry v PRAGMA
příkazech. Místo toho použijte quote()
funkci k zabránění injektáži 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();