VBA Access 安全问题:检测访问实例是不是来自 Access.Application?

Posted

技术标签:

【中文标题】VBA Access 安全问题:检测访问实例是不是来自 Access.Application?【英文标题】:VBA Access security question: Detect if the instance of access is from Access.Application?VBA Access 安全问题:检测访问实例是否来自 Access.Application? 【发布时间】:2019-10-28 22:01:37 【问题描述】:

我的文件 (c:\mydb.accbe) 具有针对 shift 绕过、隐藏访问对象窗口保护、禁用 ctrl-g、热键绕过保护等的保护。项目也受密码保护,然后编译和加密。

问题是任何对该 accde 文件具有读取权限的用户都可以创建一个新的访问项目并使用此代码创建该项目的受保护文件的实例:

Dim appAccess As Access.Application 
Set appAccess = CreateObject("Access.Application") 
appAccess.OpenCurrentDatabase = "c:\mydb.accbe"

现在他们可以调用该实例的任何公共函数,例如:

call appAccess.run("thisIsPublicFunctionIn_mydb")

我可以看到两种可能的方法来缓解这种情况: 1# 任何可能敏感的函数都会获得一个包含“安全”代码的额外参数。 2# 通过在最后将所有函数重命名为随机数来增加一些安全性。

然后使用真正的编程语言(遗憾的是不是一个选项),对我如何检测或防止它有任何建议?

【问题讨论】:

为了防止从“外部”访问,您可以使用加密和单独的启动器应用程序/db:***.com/a/46196870/3820271 【参考方案1】:

当应用程序通过自动化打开时,UserControl 属性是可更新的,所以这不是一个真正的选择。

您无法阻止这种情况发生。最好的办法是使用 SQL Server 后端,您可以在其中严格控制表的权限,并使用 procs(有权限)来更新敏感数据。

【讨论】:

【参考方案2】:

我相信application.UserControl 会解决这个问题。我刚刚试过,通过access.application打开似乎没问题

【讨论】:

是的。但是您可以通过自动化(!)设置该属性:Application.UserControl property (Access)。因此,它是一种信息,开发人员可以使用它来控制行为,而不是作为安全选项。

以上是关于VBA Access 安全问题:检测访问实例是不是来自 Access.Application?的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 报告“每个细节”格式化和 VBA 中的访问

访问 VBA DoCmd.TransferText CSV 导入 - 错误数据类型检测删除必要的字符串信息

使用 VBA 禁用 Outlook 安全设置

Access 2013 - VBA - 记录集插入获取 ID

Access 2007 / VBA - 多个表单实例,从模块更新特定实例的控件

如何检测您的 Microsoft Access 应用程序是不是已编译,即作为 ACCDE 运行