我有一个Excel工作表,其中包含分配给按钮的VBA代码。
这是我的VBA代码的一部分:
Dim ConnectionStr As String
Dim sql As String
ConnectionStr = "Provider=SQLOLEDB.1;Password=ABCDEFG;User ID=xyz;Data Source=MyServer;Initial Catalog=NEW_DB"
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array("OLEDB;" & ConnectionStr), _
Destination:=Worksheets("Hidden").Range("$A$2")).QueryTable
.CommandType = xlCmdSql
.CommandText = "EXECUTE [dbo].[usp_one]"
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.ListObject.DisplayName = "Table_in_Hidden"
.Refresh BackgroundQuery:=False
End With
我不想在VBA宏中显示连接字符串,因为有人可能会“窥视”它并发现我们的SQL Server密码。
似乎一种解决方案是创建一个包含连接信息的配置文件,然后在VBA宏中引用该配置文件。
答案 0 :(得分:1)
无论如何,VBA必须最终获得连接的密码。无论是在连接字符串还是配置文件中。
并且连接是由Excel通过VBA建立的,因此密码(或连接字符串,配置文件等)必须与excel工作表文件一起分发。
因此,如果有人获得了excel工作表并且可以正常使用它,我认为没有一种有效的方法可以防止知道连接密码。
如果您不希望excel工作表的用户对数据库进行某些更改,则最好不要为他们分配VBA代码使用的数据库用户的相应数据库特权(如果数据库系统支持用户特权限制)