“直通查询”属性中的连接字符串的密码

时间:2015-02-26 12:18:11

标签: vba ms-access access-vba ms-access-2003

我通过MS Access中的Pass Through Query调用oracle存储过程。 在传递查询属性中,我们使用密码保存连接字符串。我不想让用户看到密码。 有没有办法在传递查询时加密密码。

QueryProperties.png

连接字符串包含  的 ODBC; DSN = NEW_ODBC; UID = XXXXX; PWD = XXXXXXX; DBQ = XXXXXX; DBA = W; APA = T; EXC = F; FEN = T; QTO = T; FRC = 10; FDL = 10; LOB = T; RST = T; BTD = F; BNF = F; BAM = IfAllSuccessful; NUM = NLS; DPM = F; MTS = T; MDI = F; CSR = F; FWC = F; FBS = 64000; TLO = O ; MLD = 0; ODA = F;

我使用docmd来调用传递查询

DoCmd.OpenQuery "qry_into_table", acViewNormal, acEdit

如果我从上面的字符串中删除了PWD,每次都要求输入密码。我听说过使用DSN减少连接的概念,但我不知道如何为odbc创建dsn less连接。我正在使用用户dsn。

有没有办法加密密码或者用户看不到密码?

谢谢

1 个答案:

答案 0 :(得分:3)

如果你链接所有的表以及pass-through查询和LEAVE OUT的uid /密码,那么你的quires和链表等运行就好了。您需要在应用程序启动时执行JUST ONE登录命令。

因此,在您的DSNless重新链接代码中,请包含pass-though查询。

如何消除在此处列出的链接表中包含用户ID和密码的需要:

电源提示:提高数据库连接的安全性

http://blogs.office.com/b/microsoft-access/archive/2011/04/08/power-tip-improve-the-security-of-database-connections.aspx

以上内容也适用于传递查询。

结果是你可以在代码中执行这样的pass through查询:

Currentdb.Execute "qry_into_table"

您甚至可以使用以下代码将值传递给商店过程:

With Currentdb.QueryDefs("MyPass")
   .SQL = "exec sp_MyUpdate " & strParm1
   .execute
End With

请注意干净,以及我们如何处理上述代码中的连接字符串。

因此,上面的功能提示确实消除了大量代码,无需引入ADO来调用Sproces,并且无需在代码中处理混乱的连接字符串。