Verschlüsselung
SQLite unterstützt das Verschlüsseln von Datenbankdateien standardmäßig nicht. Stattdessen müssen Sie eine geänderte Version von SQLite wie SEE, SQLCipher, SQLiteCrypt oder wxSQLite3 verwenden. In diesem Artikel wird die Verwendung eines nicht unterstützten Open-Source-Builds von SQLCipher veranschaulicht, die Informationen gelten jedoch auch für andere Lösungen, da sie im Allgemeinen das gleiche Muster befolgen.
Installation
dotnet remove package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Weitere Informationen zum Verwenden einer anderen nativen Bibliothek für die Verschlüsselung finden Sie unter Benutzerdefinierte SQLite-Versionen.
Angeben des Schlüssels
Geben Sie den Schlüssel mithilfe Schlüsselworts Password
für Verbindungszeichenfolgen an, um die Verschlüsselung für eine neue Datenbank zu aktivieren. Verwenden Sie SqliteConnectionStringBuilder, um den Wert per Benutzereingabe hinzuzufügen oder zu aktualisieren und Angriffe durch das Einschleusen von Verbindungszeichenfolgen zu vermeiden.
var connectionString = new SqliteConnectionStringBuilder(baseConnectionString)
{
Mode = SqliteOpenMode.ReadWriteCreate,
Password = password
}.ToString();
Wichtig
Microsoft empfiehlt, immer den sichersten Authentifizierungsflow zu verwenden. Wenn Sie eine Verbindung mit Azure SQL herstellen, ist Managed Identities for Azure Resources die empfohlene Authentifizierungsmethode.
Tipp
Die Methode zum Ver- und Entschlüsseln vorhandener Datenbanken variiert je nach verwendeter Lösung. Beispielsweise müssen Sie für SQLCipher die Funktion sqlcipher_export()
verwenden. Weitere Informationen finden Sie in der Dokumentation zu Ihrer Lösung.
Neuvergabe von Schlüsseln für Datenbanken
Wenn Sie den Schlüssel einer Datenbank ändern möchten, verwenden Sie eine PRAGMA rekey
-Anweisung.
Allerdings unterstützt SQLite keine Parameter in PRAGMA
-Anweisungen. Verwenden Sie stattdessen die quote()
-Funktion, um die Einschleusung von SQL-Befehlen zu verhindern.
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();