Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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();