Aracılığıyla paylaş


Şifreleme

SQLite varsayılan olarak veritabanı dosyalarını şifrelemeyi desteklemez. Bunun yerine SQLCipher, SQLiteCrypt veya wxSQLite3 gibi değiştirilmiş bir SQLite sürümü kullanmanız gerekir. Bu makalede SQLCipher'ın desteklenmeyen, açık kaynaklı bir derlemesinin kullanılması gösterilmektedir, ancak bilgiler genellikle aynı deseni izlediğinden diğer çözümler için de geçerlidir.

Yükleme

dotnet remove package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher

Şifreleme için farklı bir yerel kitaplık kullanma hakkında daha fazla bilgi için bkz . Özel SQLite sürümleri.

Anahtarı belirtin

Yeni bir veritabanında şifrelemeyi etkinleştirmek için bağlantı dizesi anahtar sözcüğünü Password kullanarak anahtarı belirtin. Kullanıcı girişinden değeri eklemek veya güncelleştirmek ve bağlantı dizesi ekleme saldırılarından kaçınmak için kullanınSqliteConnectionStringBuilder.

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

Önemli

Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Azure SQL'e bağlanıyorsanız önerilen kimlik doğrulama yöntemi Azure kaynakları için Yönetilen Kimlikler'dir.

İpucu

Mevcut veritabanlarını şifreleme ve şifresini çözme yöntemi, kullandığınız çözüme bağlı olarak değişir. Örneğin, SQLCipher'da sqlcipher_export() işlevini kullanmanız gerekir. Ayrıntılar için çözümünüzün belgelerine bakın.

Veritabanını yeniden anahtarlama

Şifrelenmiş bir veritabanının anahtarını değiştirmek istiyorsanız, bir PRAGMA rekey deyimi oluşturun.

Ne yazık ki SQLite, deyimlerdeki PRAGMA parametreleri desteklemez. Bunun yerine, SQL ekleme işlemini quote() önlemek için işlevini kullanın.

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