Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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();