VBA密码保护

8

1
使其真正安全的唯一方法是根本不要分发敏感数据。相反,使用客户端/服务器方法,从客户端发送请求到服务器。然后服务器可以处理输入数据并仅返回客户端所请求的结果。因此,客户端只接收数据的一部分或结果,但不包含敏感原始数据。 - Pᴇʜ
1
我没有尝试过,但你不可以设置一个ODBC连接并使用它来连接数据库吗?我能想到的这种方法的直接缺点是,你将不得不为每个用户设置此连接。但它应该可以隐藏你的连接细节。 - Zac
4
为什么不在数据库用户级别上限制数据库访问,并设置适当的“公共”权限?这样,如果您的用户绕过密码并获取凭据,他们也无法进行任何通过前端无法完成的操作。 - Comintern
2
也许这对你有帮助:https://www.excel-pratique.com/en/vba_tricks/vba-obfuscator.php - Storax
1
这可能是另一个解决方案:如何在VBA中安全地存储连接字符串详细信息 - Pᴇʜ
显示剩余6条评论
2个回答

1

很遗憾,对你的问题的答案是否定的。没有任何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

那是一个大致的想法。

如果你真的想要深入研究混淆,你可以按照这里的“教程”进行操作: 如何在VBA中安全存储连接字符串细节


-1

不,这是不可能的。任何类型的密码都可以使用更新的Excel VBA宏代码和软件来解除保护。

通过更改文件扩展名来破解Excel VBA密码 使用十六进制编辑器破解Excel VBA项目密码 使用宏代码


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接