带有加密密码的 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
我们能做什么?
手动 使用支持 CryptoAPI 的最新 NuGet 版本 - 1.0.112.2.
注意 - 它 必须 手动完成 - 通过编辑 csproj
中的 PackageReference
或编辑 config.packages
。
原因是旧版本未从 the NuGet feed 中列出(!):
为 SQLite Encryption Extension
(SEE
) 购买永久源代码许可证,一次性费用为 2000 美元(截至 2021 年 2 月)- purchase link
使用 SQLCipher
- SQLCipher 是一个 SQLite 扩展,提供数据库文件的 256 位 AES 加密 - GitHub source(我自己没有测试过!)
数据源
我有一个使用 “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
我们能做什么?
手动 使用支持 CryptoAPI 的最新 NuGet 版本 - 1.0.112.2.
注意 - 它 必须 手动完成 - 通过编辑
csproj
中的PackageReference
或编辑config.packages
。 原因是旧版本未从 the NuGet feed 中列出(!):为
SQLite Encryption Extension
(SEE
) 购买永久源代码许可证,一次性费用为 2000 美元(截至 2021 年 2 月)- purchase link使用
SQLCipher
- SQLCipher 是一个 SQLite 扩展,提供数据库文件的 256 位 AES 加密 - GitHub source(我自己没有测试过!)