VBA - 从OLEDB连接字符串中删除密码

Dav*_*ers 8 oledb connection excel vba excel-vba

我有一个excel文件,其中包含一些由几个数据透视表利用的OLEDB连接.我想创建一个VBA函数,在文件关闭时从该多个连接字符串中删除所有密码(这样就不会保留用户密码).首先,我认为我需要做的就是将"保存密码"属性设置为false,如下所示:

Public Sub RemovePasswordByNamePrefix()
    Dim cn As Object
    Dim oledbCn As OLEDBConnection

    For Each cn In ThisWorkbook.connections
        Set oledbCn = cn.OLEDBConnection
        oledbCn.SavePassword = False          
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

应该正常工作,在关闭文件并重新打开它时,您不应再在连接字符串中看到密码.它不应该"保存":

在此输入图像描述

错了,密码还在那里......它已被"保存".不确定该功能应该做什么.也许有人提到不同的密码?所以,我尝试了大锤子方法,不幸的是它有它自己的挑战,到目前为止我还没有这样做.

我不太清楚如何做到这一点......为什么这么严重不安全?它会在每个包含此类连接字符串的文件中保留明文密码,任何可以访问该文件的人都可以轻松读取.

也许我可以制作某种正则表达式来删除文件中的密码?当我在界面中执行此操作时,我的多维数据集刷新并提示我输入凭据,(我想知道)如果我在VBA中执行此操作会发生这种情况,即使触发器是在excel关闭时也是如此?

结论:阻止这些密码在文件关闭时保留在文件中的最佳方法是什么?

Dav*_*ers 5

@TomJohnRiddle指出我应该修改类似于以下问题的连接字符串.最初我担心采用这种方法可能会在修改连接字符串后提示用户使用登录屏幕.然而,由于我没有任何更好的想法,我给了它一个镜头,它似乎工作,这是我嘲笑的:

Public Sub RemovePasswordByNamePrefix()
    Dim cn As Object
    Dim oledbCn As OLEDBConnection

    Dim regEx As New RegExp
    regEx.Pattern = "Password=[^;]*;"

    For Each cn In ThisWorkbook.connections            
        Set oledbCn = cn.OLEDBConnection
        oledbCn.SavePassword = False

        oledbCn.connection = regEx.Replace(oledbCn.connection, "")
        oledbCn.CommandText = "" 'My app repopulates this after open
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

它似乎工作:

在此输入图像描述

所以我想我会采用这种方法,但我仍然愿意接受其他建议.很高兴清除所有内容并完全重新加载它,但到目前为止似乎不可能.

我也关注哪些版本的VBA支持"正则表达式"引用.我想要一些Excel 2010+ 32/64位兼容的东西.我还没有在任何旧版本上测试它(我目前正在运行Office 365).我认为一切都会好起来的,但过去我对这些事情感到非常惊讶.