Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
SQLite ne prend pas en charge le chiffrement des fichiers de base de données par défaut. Au lieu de cela, vous devez utiliser une version modifiée de SQLite comme SQLCipher, SQLiteCrypt ou wxSQLite3. Cet article illustre l’utilisation d’une build open source non prise en charge de SQLCipher, mais les informations s’appliquent également à d’autres solutions, car elles suivent généralement le même modèle.
Installation
dotnet remove package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Pour plus d’informations sur l’utilisation d’une autre bibliothèque native pour le chiffrement, consultez Versions SQLite personnalisées.
Spécifier la clé
Pour activer le chiffrement sur une nouvelle base de données, spécifiez la clé à l’aide du mot clé de chaîne de connexion Password. Utilisez SqliteConnectionStringBuilder pour ajouter ou mettre à jour la valeur à partir de l’entrée utilisateur et éviter les attaques par injection de chaîne de connexion.
var connectionString = new SqliteConnectionStringBuilder(baseConnectionString)
{
Mode = SqliteOpenMode.ReadWriteCreate,
Password = password
}.ToString();
Importante
Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.
Conseil
La méthode de chiffrement et de déchiffrement des bases de données existantes varie selon la solution que vous utilisez. Par exemple, vous devez utiliser la fonction sqlcipher_export() sur SQLCipher. Pour plus d’informations, consultez la documentation de votre solution.
Réattribuer les clés de la base de données
Si vous souhaitez modifier la clé d’une base de données chiffrée, émettez une instruction PRAGMA rekey.
Malheureusement, SQLite ne prend pas en charge les paramètres dans les instructions PRAGMA. Utilisez plutôt la fonction quote() pour empêcher l’injection 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();