如何在Excel VBA项目中保护ADO连接?

我有一个Excel电子表格(.xlsb),通过VBA中的ActiveX数据对象(ADO)连接到SQL Server,我必须与一群人共享。 代码使用以下string连接执行数据库:

' Create the connection string. sConnString = "Provider=SQLOLEDB;" & _ "Data Source={server name};" & _ "Initial Catalog={database name};" & _ "UserId={username};" & _ "Password={password};" 

如何保持我的SQL用户名和密码安全,并防止第三方获得访问权限? 密码保护VBA项目是否足够或可以很容易地破解?

VBA项目没有足够的保护 – 任何人有2个小时的空闲时间和互联网可能会通过。

什么是基本的情况下是使用不同的权限在数据库级别的不同用户。 然后,请求Excel电子表格中的用户在其中一个单元格中或通过userform提供密码和用户名。 获取密码和用户名,并在连接string中使用它。

作为安全的进一步措施,您可以使用一些小窍门,我称之为salting 。 例如,假设给定用户的密码是vityata 。 然后要求用户input。 进入后,取出密码并将其更改为其他内容。 这个东西应该是数据库的密码。 我的意思是这样的:

 Public Function str_generator(ByVal str_value As String, ByVal b_fix As Boolean) As String Dim l_counter As Long Dim l_number As Long Dim str_char As String On Error GoTo str_generator_Error If b_fix Then str_value = Left(str_value, Len(str_value) - 1) str_value = Right(str_value, Len(str_value) - 1) End If For l_counter = 1 To Len(str_value) str_char = Mid(str_value, l_counter, 1) If b_is_odd(l_counter) Then l_number = Asc(str_char) + IIf(b_fix, -2, 2) Else l_number = Asc(str_char) + IIf(b_fix, -3, 3) End If str_generator = str_generator + Chr(l_number) Next l_counter If Not b_fix Then str_generator = Chr(l_number) & str_generator & Chr(l_number) End If On Error GoTo 0 Exit Function str_generator_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure str_generator of Function Modul1" End Function Private Function b_is_odd(l_number As Long) As Boolean b_is_odd = l_number Mod 2 End Function 

假设用户密码是vityata 。 然后在用户input之后,它变为cxlv|cwcc ,这是数据库的真实密码。

 ?str_generator("vityata",false) cxlv|cwcc ?str_generator("cxlv|cwcc",true) vityata 

最后但并非最不重要 – 这是我的类连接看起来像 – https://github.com/Vitosh/VBA_personal/blob/6750f76e85540829056e7889c489a65daf85c696/cls_Connection.vb 。 如果你有改进的想法,我会很乐意看到一个拉动请求。

VBA密码保护不能被认为是安全的,因为它很容易规避。

您当然可以在VBA代码中添加某种模糊处理(散列函数或类似处理),这样密码就不会以纯文本forms显示出来,但熟悉VBA的人应该能够在很短的时间内解决这个问题。

我会考虑限制访问数据库与视图只包含所需的数据。

隐藏密码可以通过将连接function放入一个dll来完成,然后在VBA代码中引用它。 这将需要更多的工作来扭转,给你更多的可能性来真正隐藏凭证。 另请参阅此回复: https : //stackoverflow.com/a/19163256/5970009