如何以编程方式从 Access DB 中删除已知密码?

2023-12-02

由于我无法控制的原因,我必须处理一个新的 Access MDB 文件,该文件每月由我编写的自动化过程下载、解密和解压缩。尽管有 PGP 加密,发件人(保险公司)仍拒绝发送不受密码保护的 MDB。

不幸的是,文件下载后立即进行处理,并假定没有密码,因此这些文件不会被处理,因为 OleDbException 显示我们的密码错误。我们知道密码,并且我们知道连接字符串的“使用数据库密码”选项:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;Jet OLEDB:Database Password=MyDbPassword;

这只能解决部分问题,因为其他部门稍后需要访问这些文件,而他们不知道密码。到目前为止,我只能通过在打开文件时按住 Shift 键,在密码提示时取消,通过打开的 Access 进程再次打开文件,同时再次按住 Shift 并单击“以独占方式打开”来使其工作,然后继续在浏览密码对话框时按住 Shift 键,然后通过安全工具取消设置密码。

我想做的只是使用 C# 在下载 MDB 文件后立即以编程方式取消设置 MDB 文件上的数据库密码。有没有办法做到这一点,或者每次我们获得新文件时我都必须亲自干预,完全违背了自动化的目的?


以编程方式更改密码的方式详解here.

本质上,需要执行以下操作:

  1. 使用 ADO.NET 打开与数据库的连接
  2. 在数据库上执行 alter 语句,将其密码设置为 NULL,如下所示:

    更改数据库密码 [您的密码] NULL;

  3. 处置连接

示例代码取自源码:

Private Function CreateDBPassword(ByVal Password As String, _
    ByVal Path As String) As Boolean
Dim objConn as ADODB.Connection
Dim strAlterPassword as String
On Error GoTo CreateDBPassword_Err
' Create the SQL string to initialize a database password.
strAlterPassword = "ALTER DATABASE PASSWORD [Your Password] NULL;"

' Open the unsecured database.
Set objConn = New ADODB.Connection
With objConn
    .Mode = adModeShareExclusive
    .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data " & _
        "Source=[Your Path];" 

 ' Execute the SQL statement to secure the database.
 .Execute (strAlterPassword)
End With

' Clean up objects.
objConn.Close
Set objConn = Nothing

' Return true if successful.
CreateDBPassword = True

CreateDBPassword_Err:
Msgbox Err.Number & ":" & Err.Description
CreateDBPassword = False 
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式从 Access DB 中删除已知密码? 的相关文章

随机推荐