【发布时间】:2018-02-21 22:00:37
【问题描述】:
我正在尝试设置一个包含 VBA 代码的“启动器”数据库,该代码将打开第二个受密码保护的数据库。然后我可以将启动器 db 转换为 accde,这样就无法读取包含密码的 VBA。
到目前为止,我有以下代码。
Private Sub Form_Load()
Dim acc As Access.Application
Dim db As DAO.Database
Dim strDbName As String
strDbName = "C:\database Folder\secureDB.accdb"
Set acc = New Access.Application
acc.Visible = True
Set db = acc.DBEngine.OpenDatabase(strDbName, False, False, ";PWD=swordfish")
acc.OpenCurrentDatabase (strDbName)
Application.Quit
End Sub
当启动器数据库打开时,会加载一个表单,该表单随后会触发上述代码。它可以工作,但问题是最后一行旨在仅关闭启动器数据库但关闭两个数据库。我也尝试过使用 Shell 打开主数据库,但无法通过这种方式传递密码。
如何关闭第一个数据库,同时保持第二个数据库打开?
【问题讨论】:
-
我建议在 shell 脚本中使用命令行选项打开或搜索“访问前端更新程序”以查看它们是如何执行此操作的(我认为一个称为 mdbloader)。
-
或者试试 `acc.Application.Quit'。
-
请注意,访问数据库可以反编译,因此可以读取字符串(通过一些努力)。正如我之前的评论中所说,我有一个数据库,其中存储了一个带有用户密码的加密数据库密码,因此只有拥有有效密码的用户才能登录。
-
@ErikvonAsmuth:密码存储在键盘下;-)。也许更好地检查 Windows 登录以查看用户是否可以登录?
-
@BitAccesser 这是伪安全。您必须假设黑客可以读取数据库中所有未加密的部分。你可以修改我的实现(找到here)来检查它并默认使用Windows用户名,但这并不能真正加强它。当然,正确的密码管理就是一切,但 Windows 密码也可能被贴在键盘下面。
标签: ms-access vba ms-access-2010