首页 > 解决方案 > 有没有办法在 CurrentProject.AccessConnection.Properties 中禁用 Access 缓存安全性?

问题描述

我正在研究一个通过 DSN ODBC 连接将表链接到 DB2 数据库的 Access 数据库。

所有的表都使用相同的 System DSN,因为它们都在同一个 DB2 数据库中。为了获得一组表,我使用系统 DSN“A”和一个用户 ID 和密码,而对于另一组表,我使用与第一组表相同的系统 DSN “A”,但使用另一个用户 ID和密码。

这在 Access 中造成了严重破坏,因为如果我从第一组打开一个表,它会缓存凭据,然后如果我尝试从第二组打开一个表而不重新启动 Access,它会引发Invalid credentials/username错误。

使用这个答案,我能够解决它:我创建了两个不同的 System DSN ODBC 连接,一个用于每组表。这允许我在同一会话中打开任一组的表而不会出现授权错误(例如,无需重新启动 Access)。

我想知道,Windows 10 和 Office 365 中是否有办法(通过 vba、AutoExec 宏、更改注册表、策略等)将默认行为CurrentProject.AccessConnection.Properties("Cache Authentication")从更改TrueFalse

打开数据库后,此属性是只读的。

所以我的另一个想法是:如果您打开一个将缓存身份验证设置为 False 的远程数据库并将其添加到另一个数据库中的工作区,您可以在该“远程”数据库中通过 VBA 中的 DAO 运行查询吗?

例如: 数据库“A”有所有链接到 DB2 的表。从另一个数据库“B”我打开数据库“A”并将其添加到数据库“B”的工作区,缓存身份验证设置为 false(<- 这可能吗?)通过OpenConnection?或OpenDatabase。一旦从数据库“B”打开数据库“A”,我是否能够使用引用数据库“A”中链接表的 VBA 在数据库“B”中运行动态查询(意味着没有存储过程)?

更新 根据Access 2003 VBA Programmer's Reference p.556 one can't specify advanced options usingOpenConnection 书中的快照

这个问题之前已经被问过好几次了:

标签: vbadatabasems-accessauthenticationdb2

解决方案


不幸的是,我不知道这是可能的。

但是,您可以(并且应该)采用 DSN 较少的连接。因此,这将消除使用 DSN 的需要。(这几天很痛苦——尤其是在机器被锁定的情况下)。这将允许您更改登录/uid,而无需重新链接。

但是,如果您需要同时访问两个数据库,您仍然非常需要两组表。您也可以重新运行链接代码,但毫无疑问您一直在避免重新链接,并且您只想交换 DSN。

因此,您可以在不重新链接的情况下切换用户/通行证。但是,如果你需要切换你指向的数据库呢?没有办法解决这个问题 - 您必须重新链接表格。

因此,只需一组链接表,您就可以再次登录(使用不同的用户/ID),但要切换您指向的数据库,您必须重新链接。

不,除非您退出并重新加载访问权限,否则您无法清除密码缓存。


推荐阅读