![]() |
1
1
是的,你可以这样做。 连接字符串中不必包含UID+密码。 这意味着在代码启动时,您可以执行登录。你可以: 在VBA代码中嵌入登录。只需要在启动时一次性登录,然后所有现有链接表都将工作,即使链接表中的连接字符串中没有用户+密码,也可以工作。 如果您担心有人使用某种文件十六进制编辑器等来解析或查看accDE文件的上下文,您可以使用VBA中的某种类型的加密或哈希代码来转换嵌入的用户+密码。 另一种简单的方法是在启动时提示用户id+密码(要求用户输入id+密码)。此时,您只需执行登录即可。一旦执行了该登录,所有链接表都将正常工作,并且这些链接表不需要包含UID+Password,也不需要嵌入这些链接表中。 我不能强调,如果这样做,就不需要重新链接表。 上述原因和技巧是,一旦发生合法登录,access将缓存登录。一旦发生登录(成功连接),所有其他链接表都将使用此缓存连接。 因此,我建议您删除所有链接的表,然后执行登录,然后重新链接所有表,并在执行此操作时保留用户+密码。(请记住,不要在用于链接表的连接字符串中包含用户+密码。您可以使用内置的表管理器执行此操作,也可以使用任何一种方式的代码。 以这种方式链接后,如果启动应用程序,表链接将不起作用,并且只有在执行登录后才起作用。 这意味着,如果有人试图打开或将表链接导入另一个数据库,链接表将无法工作,因为链接表不包含用户+密码。 要执行登录,请使用以下代码: strCon=“有效的连接字符串加上用户ID+密码” 因此,取现有的连接字符串(不带用户名/密码),将用户名/密码添加到字符串中,然后执行如下登录代码:
因此,执行登录的代码为:
执行上述操作后,没有用户+密码的链接表现在就可以工作了! 如果有人试图打开或导入表链接,则不会包含用户+密码,也不希望在用于链接表的连接字符串中包含用户+密码。 因此,请删除表链接。执行上述登录代码。现在重新链接表,但不要选择包含用户+密码的选项。 如果跳过上面的登录代码,并尝试打开一个表,那么ODBC驱动程序将提示您输入用户ID+密码。(因此,您得到什么样的提示将取决于数据库供应商如何设置其odbc驱动程序来处理此问题。 以上是您所需要的全部。下面的文章概述了上述代码的思想及其工作原理: https://blogs.office.com/en-us/2011/04/08/power-tip-improve-the-security-of-database-connections/ 但是,相同的代码和中的解释应该足够了。 您不必在链接表中包含userid+密码,而且出于明显的安全原因,您不应该这样做。 请记住,几乎所有客户端软件都需要一些登录,但如果您不在代码中的任何位置嵌入uid/密码,那么就消除了Access中链接表的巨大安全漏洞。如果有人试图反汇编应用程序、获取链接表连接字符串等,他们将无法获得密码。因此,如果在启动时提示,登录,然后清空这些值,那么uid/密码再次不会嵌入到应用程序中。 任何人都可以伪装代码,如果您在访问中遵循此方法,他们就无法获得uid/密码。 如果用户导入这些链接,并且在普通视图中有uid/密码,那么他们将看到uid/密码。但是,如果链接没有uid/密码的表,则不需要在应用程序的任何位置嵌入uid/密码即可工作。所需的只是使用上述代码执行有效登录-一旦完成,所有连接都将正常工作。 因此,在执行登录之前或之后,链接表在任何时候都不会显示uid或密码。事实上,这甚至包括是否正在使用accDB(非编译应用程序)。如果跳入调试窗口并检查用于活动工作链接表的连接字符串,您将看到连接字符串中不包含uid/密码! 绝大多数客户端软件系统都必须连接到数据库,如果代码或应用程序中没有包含uid/密码,那么这是一个“合理”的安全级别。 下面是我使用的一些示例代码:
使用的TestLogon是:
并添加表链接:
我的示例代码是针对SQL server的。然而,我上面链接的文章相当不错,示例代码是针对MySQL的。 下面是一个MySQL示例:
所以你需要测试你是否真的登录了(这就是本文的重点)。 如果您在重新链接期间收到提示,则表示您所拥有的功能不起作用。这里的要点是消除登录的需要。 一旦这起作用。您可以启动Access,然后双击一个表-将提示ODBC登录。但是,如果先执行登录代码,则可以在没有odbc登录提示的情况下单击该表。 |
![]() |
john c. j. · 如何编辑和复制非VBA宏? 7 年前 |
![]() |
farmpapa · 是否将日期范围的SQL联接计数连接到日历日期表? 7 年前 |
![]() |
jrussin · MS Access提取条形码的最后12位数字 7 年前 |
![]() |
Smith Stanley · 强制短文本字段始终为X个字符 7 年前 |
![]() |
IcyPopTarts · 在没有提示的情况下访问VBA以重写文件 7 年前 |
![]() |
aassddffa · 无法更改Access 2013中的列引用 7 年前 |
![]() |
Heather · DLOOKUP返回#NAME?IIF语句出错 7 年前 |