sql-server - 创建一个包含连接信息的配置文件,然后引用该连接
问题描述
我有一个 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 宏中引用该配置文件。
解决方案
无论如何,VBA 必须最终获得连接的密码。无论是在连接字符串还是配置文件中。
并且连接是由 Excel 通过 VBA 建立的,因此密码(或连接字符串、配置文件等)必须与 Excel 工作表文件一起分发。
因此,如果有人拿到了excel表格并且可以正常使用,我认为没有有效的方法可以防止知道连接密码。
如果您不希望excel表格的用户对数据库进行一些更改,最好不要为VBA代码使用的数据库用户分配相应的数据库权限(如果数据库系统支持用户权限限制)。
推荐阅读
- c# - 表达式树不支持动态泛型类型参数吗?
- ios - 初始化 CoreML 模型时未找到金属设备/声明网络时出错
- curl - 缓冲区 API:不允许的键字符
- html - 如何指定 W3.CSS 悬停在下拉菜单中的间距?
- c++ - 将 std::function* 传递给模板参数
- ruby-on-rails-4 - 需要 rest-client 到 Chef 中的模块
- python - 将元素作为其他两个 numpy 数组形成 numpy 数组时出现广播错误
- c - Cortex-M4F MCU 启动中关键部分的内存屏障
- c# - 如何使用关闭的 WinForms C# App 发送 toast 通知?
- c++ - 转储 C++ 对象的内存布局在 clang 中不起作用