vba - 有没有办法在 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")
从更改True
为False
打开数据库后,此属性是只读的。
所以我的另一个想法是:如果您打开一个将缓存身份验证设置为 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
这个问题之前已经被问过好几次了:
解决方案
不幸的是,我不知道这是可能的。
但是,您可以(并且应该)采用 DSN 较少的连接。因此,这将消除使用 DSN 的需要。(这几天很痛苦——尤其是在机器被锁定的情况下)。这将允许您更改登录/uid,而无需重新链接。
但是,如果您需要同时访问两个数据库,您仍然非常需要两组表。您也可以重新运行链接代码,但毫无疑问您一直在避免重新链接,并且您只想交换 DSN。
因此,您可以在不重新链接的情况下切换用户/通行证。但是,如果你需要切换你指向的数据库呢?没有办法解决这个问题 - 您必须重新链接表格。
因此,只需一组链接表,您就可以再次登录(使用不同的用户/ID),但要切换您指向的数据库,您必须重新链接。
不,除非您退出并重新加载访问权限,否则您无法清除密码缓存。
推荐阅读
- data-visualization - 水平箱线图Stata
- java - Java日历以毫秒为单位返回错误时间Android
- vue.js - Vue $emit 事件触发但是 this.$root.$on 什么都不做
- scala - sbt 中的项目文件夹
- r - 使用 mutate across 将回归模型应用于每一列
- python - 没有名为 elasticsearch 的模块-Python 3.7.9-Windows 10
- nginx - 当 URL 包含文件扩展名时,我可以在 nginx 中返回 404 吗?
- python - 如何开始为 python IDLE 开发扩展?
- plsql - 在 PL/SQL 的 DECLARE 部分中未初始化的变量会发生什么?
- sql - 什么导致 SQL Server Management Studio 中的视图为空?