Sdílet prostřednictvím


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