我有一个使用“ SQLite Cipher” 的加密数据库。当我尝试使用连接字符串连接到数据库时,出现以下错误消息:
“ SQL逻辑错误,无法使用“密码”连接字符串属性:库不是使用加密支持构建的。”
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
答案 0 :(得分:2)
我认为此错误的实际原因是自 System.Data.SQLite
版本 ~1.0.113.1 以来缺乏对“legacy CryptoAPI”的支持。
它是在以下提交中完成的: https://system.data.sqlite.org/index.html/info/1dd56c9fd59a10fd
手动使用支持 CryptoAPI 的最新 NuGet 版本 - 1.0.112.2。
注意 - 它必须手动完成 - 通过编辑 PackageReference
中的 csproj
或编辑 config.packages
。
原因是旧版本未列出 (!) 来自 the NuGet feed:
购买 SQLite Encryption Extension
(SEE
) 的永久源代码许可证,一次性费用为 2000 美元(截至 2021 年 2 月)- purchase link
使用 SQLCipher
- SQLCipher 是一个 SQLite 扩展,它提供 256 位 AES 数据库文件加密 - GitHub source(我自己没有测试过!)
答案 1 :(得分:0)
通过此软件包Link更改System.data.sqlite
要为不受保护的数据库设置密码,请执行以下操作:
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()
注意:只要您选择System.Data.SQLite而不是Sqlite 3作为数据库类型,开放源数据库管理器SQLiteStudio便可以打开采用这种方式受密码保护的文件。 (需要v 3.1.1,当前版本)。