Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
SqLite domyślnie nie obsługuje szyfrowania plików bazy danych. Zamiast tego należy użyć zmodyfikowanej wersji biblioteki SQLite, takiej jak SQLCipher, SQLiteCrypt lub wxSQLite3. W tym artykule pokazano, jak używać nieobsługiwanej kompilacji typu open source sqlCipher, ale informacje dotyczą również innych rozwiązań, ponieważ zwykle są zgodne z tym samym wzorcem.
Instalacja
dotnet remove package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Aby uzyskać więcej informacji na temat używania innej biblioteki natywnej do szyfrowania, zobacz Niestandardowe wersje SQLite.
Określanie klucza
Aby włączyć szyfrowanie dla nowej bazy danych, określ klucz przy użyciu słowa kluczowego Password
parametry połączenia. Użyj SqliteConnectionStringBuilder do dodawania lub aktualizowania wartości z danych wejściowych użytkownika i unikaj ataków polegających na wstrzyknięciu ciągów połączeń.
var connectionString = new SqliteConnectionStringBuilder(baseConnectionString)
{
Mode = SqliteOpenMode.ReadWriteCreate,
Password = password
}.ToString();
Ważne
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Jeśli łączysz się z usługą Azure SQL, Zarządzane Tożsamości dla zasobów Azure to zalecana metoda uwierzytelniania.
Wskazówka
Metoda szyfrowania i odszyfrowywania istniejących baz danych różni się w zależności od używanego rozwiązania. Na przykład należy użyć funkcji sqlcipher_export()
do SQLCipher. Aby uzyskać szczegółowe informacje, zapoznaj się z dokumentacją rozwiązania.
Zmiana klucza bazy danych
Jeśli chcesz zmienić klucz zaszyfrowanej bazy danych, wydaj instrukcję PRAGMA rekey
.
Niestety sqLite nie obsługuje parametrów w PRAGMA
instrukcjach. Zamiast tego użyj quote()
funkcji , aby zapobiec wstrzyknięciu kodu 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();