Encriptação

O SQLite não suporta a encriptação de ficheiros de base de dados por predefinição. Em vez disso, você precisa usar uma versão modificada do SQLite como SQLCipher, SQLiteCrypt ou wxSQLite3. Este artigo demonstra o uso de uma compilação de código aberto sem suporte do SQLCipher, mas as informações também se aplicam a outras soluções, pois geralmente seguem o mesmo padrão.

Instalação

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

Para obter mais informações sobre como usar uma biblioteca nativa diferente para criptografia, consulte Versões personalizadas do SQLite.

Especifique a chave

Para habilitar a criptografia em um novo banco de dados, especifique a chave usando a Password palavra-chave da cadeia de conexão. Use SqliteConnectionStringBuilder para adicionar ou atualizar o valor da entrada do usuário e evitar ataques de injeção de cadeia de conexão.

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

Importante

A Microsoft recomenda que você use o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades Gerenciadas para recursos do Azure serão o método de autenticação recomendado.

Gorjeta

O método para criptografar e descriptografar bancos de dados existentes varia dependendo da solução que você está usando. Por exemplo, você precisa usar a sqlcipher_export() função no SQLCipher. Consulte a documentação da solução para obter detalhes.

Reconfigurando o banco de dados

Se você quiser alterar a chave de um banco de dados criptografado, emita uma PRAGMA rekey instrução.

Infelizmente, o SQLite não suporta parâmetros em PRAGMA instruções. Em vez disso, use a função quote() para evitar a injeção de 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();