很遗憾,您的问题的答案是否定的。没有 Excel 密码是完全安全的。
但是,如果您的数据传输工具必须是 Excel,并且您正试图混淆 SQL 连接字符串(听起来您的问题就是这种情况),那么有关于在 Excel 中混淆 SQL 连接字符串的文章会有所帮助。尽管密码最终可以被逆向工程,但它不能在连接字符串中被读取为纯文本,并且需要一定程度的知识才能逆向工程师。
在此处链接并完全归功于@Ruddles:https://www.mrexcel.com/forum/excel-questions/512040-data-connector-hide-password.html
为了将来可能出现的死链接,我冒昧地转置了以下信息:
来自网站:
您通过一些 VBA 处理密码,将其转换为
完全不同的字符串。然后,您可以将字符串硬编码为
您的 VBA,因为如果有人看到它,他们将无法使用它
因为它不是真正的密码。那么当你需要使用
代码中的密码,您通过相反的过程运行它,然后
返回原始字符串。
您可以根据需要使代码变得简单或复杂 - 但如果
有人看到他们可能有足够知识的代码
对该过程进行逆向工程并恢复密码。它没有
真的加密,它只是增加了一个额外的障碍让人们克服如果
他们想非法访问它。另一方面,它可以满足
您的数据库安全专家!
试试这个:创建一个新工作簿并打开 VBE (Alt-F11),然后执行
插入 > 模块。将此代码粘贴到代码窗口中:-
代码:
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
...等"
这就是一般的想法。
如果您真的想通过混淆去城镇,您可以按照此处的“教程”进行操作:
How to securely store Connection String details in VBA