带有加密密码的 SQLite 连接字符串

Sqlite connection string with encrypted password

我有一个使用 “SQLite Cipher” 的加密数据库。当我尝试使用连接字符串连接到数据库时,出现以下错误消息:

'SQL logic error Cannot use "Password" connection string property: library was not built with encryption support.'

Imports System.Data.SQLite
Public Class frm_projects
    Dim dtset As New SQLiteConnection("Data Source=Setting.db;Password=m;")

    Private Sub frm_projects_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            If dtset.State = ConnectionState.Closed Then
                dtset.Open()

            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Information, "Warning")
        End Try
    End Sub
End Class

Image From DB Browser sqlite Cipher

用这个包改System.data.sqliteLink

为未受保护的数据库设置密码:

Dim conn = New SQLite.SQLiteConnection(
    "Data Source=C:\yourFolder\yourDB.db3;Version=3;")
conn.Open()
conn.ChangePassword("password")
conn.Close()

要打开受密码保护的数据库:

Dim conn = New SQLite.SQLiteConnection(
    "Data Source=C:\yourFolder\yourDB.db3;Version=3;")
conn.SetPassword("password")
conn.Open()
conn.Close()

Dim conn = New SQLite.SQLiteConnection(
    "Data Source=C:\yourFolder\yourDB.db3;Version=3;Password=password;")
conn.Open()
conn.Close()

要从受密码保护的数据库中删除密码:

Dim conn = New SQLite.SQLiteConnection(
    "Data Source=C:\yourFolder\yourDB.db3;Version=3;Password=password;")
conn.Open()
conn.ChangePassword(String.Empty)
conn.Close()

注意:开源数据库管理器 SQLiteStudio 能够打开以这种方式受密码保护的文件,只要您选择 System.Data.SQLite 而不是 Sqlite 3 作为数据库类型。 (需要 v 3.1.1,当前版本)。

问题来源

我假设此错误的实际原因是自 System.Data.SQLite 版本 ~1.0.113.1.[=24 以来缺少对“旧版 CryptoAPI”的支持=]

这是在以下提交中完成的: https://system.data.sqlite.org/index.html/info/1dd56c9fd59a10fd

我们能做什么?

  1. 手动 使用支持 CryptoAPI 的最新 NuGet 版本 - 1.0.112.2.

    注意 - 它 必须 手动完成 - 通过编辑 csproj 中的 PackageReference 或编辑 config.packages。 原因是旧版本未从 the NuGet feed 中列出(!):

  2. SQLite Encryption Extension (SEE) 购买永久源代码许可证,一次性费用为 2000 美元(截至 2021 年 2 月)- purchase link

  3. 使用 SQLCipher - SQLCipher 是一个 SQLite 扩展,提供数据库文件的 256 位 AES 加密 - GitHub source(我自己没有测试过!)

数据源