Šifrování

SQLite ve výchozím nastavení nepodporuje šifrování souborů databáze. Místo toho musíte použít upravenou verzi SQLite, jako je SQLCipher, SQLiteCrypt nebo wxSQLite3. Tento článek předvádí použití nepodporované open-source verze SQLCipher, ale informace se vztahují i na jiná řešení, jelikož 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

Pro více informací o použití jiné nativní knihovny pro šifrování, viz Vlastní verze SQLite.

Zadejte klíč

Chcete-li povolit šifrování v nové databázi, zadejte klíč pomocí klíčového slova připojovacího řetězce Password. Použijte SqliteConnectionStringBuilder k přidání nebo aktualizaci hodnoty ze vstupu uživatele a zabránění útokům na injekci připojovacího řetězce.

var connectionString = new SqliteConnectionStringBuilder(baseConnectionString)
{
    Mode = SqliteOpenMode.ReadWriteCreate,
    Password = password
}.ToString();

Důležité

Společnost Microsoft doporučuje používat nejbezpečnější dostupný způsob autentizace. Pokud se připojujete k Azure SQL, Managed Identities for Azure resources je doporučený způsob ověřování.

Návod

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 funkci na SQLCipheru. Zkontrolujte dokumentaci svého řešení pro podrobnosti.

Přeindexování databáze

Pokud chcete změnit klíč zašifrované databáze, vydejte příkaz PRAGMA rekey.

Bohužel SQLite nepodporuje parametry v PRAGMA výrazech. Místo toho použijte funkci quote(), abyste zabránili SQL injekcím.

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();