我真的需要加强VBA代码的安全性,因为其中包含敏感的SQL数据!
谢谢
很遗憾,对你的问题的答案是否定的。没有任何Excel密码是完全安全的。
然而,如果你的数据传输工具必须是Excel,并且你试图混淆SQL连接字符串(根据你的问题来看,似乎是这种情况),有一些关于在Excel中混淆SQL连接字符串的文章可以帮到你。虽然密码最终可以被反向工程解密,但它不能作为明文存在于连接字符串中,需要一定的技巧来进行反向工程。
链接在这里,完全归功于@Ruddles:https://www.mrexcel.com/forum/excel-questions/512040-data-connector-hide-password.html
为了防止未来可能出现的链接失效,我已经将以下信息转述如下:
来自网站:
你可以通过一段VBA代码将密码转换成完全不同的字符串。然后,你可以将这个字符串硬编码到你的VBA中,因为如果有人看到它,他们无法使用它,因为它不是真正的密码。当你需要在代码中使用密码时,你可以通过反向过程运行它,从而返回原始字符串。Function Obfusc(oWord As String, nCrypt As Boolean) As String
Dim iPtr As Integer
Dim iByte As Byte
For iPtr = 1 To Len(oWord)
If nCrypt Then
iByte = Asc(Mid(oWord, iPtr, 1)) + 99 + iPtr
Else
iByte = Asc(Mid(oWord, iPtr, 1)) - 99 - iPtr
End If
Obfusc = Obfusc & Chr(iByte)
Next iPtr
End Function
(这是一个非常简单的例程 - 你可能想让它更复杂!)
在立即窗口 (Ctrl-R)
中输入 ?obfusc("MerryXmas#2010",true)
并按 Enter 键。这将返回 "Hello World!"
的混淆版本,即 "±ÊØÙáÁ×Ìß Ÿ¡¡"
。
现在输入 ?obfusc("±ÊØÙáÁ×Ìß Ÿ¡¡",false)
并按 Enter 键。(你可能需要复制和粘贴!)这将返回原始字符串。
因此,在实际使用中,您可以通过手动输入
?obfusc("MerryXmas#2010",true)
并将混淆后的字符串 "±ÊØÙáÁ×Ìß Ÿ¡¡"
粘贴到您的代码中,如下所示:
password = obfusc("¬±ÊØÙáÁ×Ìß Ÿ¡¡",False)
conn_str = "Provider=SQLOLEDB.1;Password=" & password & ";Persist Security Info=True
那是一个大致的想法。
如果你真的想要深入研究混淆,你可以按照这里的“教程”进行操作: 如何在VBA中安全存储连接字符串细节
不,这是不可能的。任何类型的密码都可以使用更新的Excel VBA宏代码和软件来解除保护。
通过更改文件扩展名来破解Excel VBA密码 使用十六进制编辑器破解Excel VBA项目密码 使用宏代码