Sql server Excel使用VBA通过Windows身份验证连接到SQL
我在一个用户拥有两个独立帐户的环境中工作。其中一个将其登录到主机,然后使用单独的主机使用特殊软件访问VM 其中一个虚拟机有一个SQL数据库,用于记录他们希望能够从主机上安装的excel访问的报警。我已经测试了以下代码,它在我的测试虚拟机上运行良好,但在主机虚拟机上失败Sql server Excel使用VBA通过Windows身份验证连接到SQL,sql-server,vba,excel,Sql Server,Vba,Excel,我在一个用户拥有两个独立帐户的环境中工作。其中一个将其登录到主机,然后使用单独的主机使用特殊软件访问VM 其中一个虚拟机有一个SQL数据库,用于记录他们希望能够从主机上安装的excel访问的报警。我已经测试了以下代码,它在我的测试虚拟机上运行良好,但在主机虚拟机上失败 Sub Alarm_Query() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CreateObject("ADODB.Connection") S
Sub Alarm_Query()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "PROVIDER=SQLOLEDB;DATA SOURCE=SERVER;INITIAL CATALOG=A2ALMDB;INTEGRATED SECURITY=sspi;"
.Open
End With
我知道原因是,用于登录主机的用户名没有(也不应该)访问SQL数据库所需的凭据。我试着把它改成
Sub Alarm_Query()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "PROVIDER=SQLOLEDB;DATA SOURCE=SERVER;INITIAL CATALOG=A2ALMDB;"
.Properties("Prompt") = 2
.Open
End With
这允许我输入唯一的用户名/密码,但当我给它正确的域帐户时,我会收到一条错误消息
“用户登录失败…原因:试图使用NT帐户名
使用SQL Server身份验证
。
是否有一种方法可以提示运行my macro的用户使用windows身份验证提供用户名/密码,而不使用登录身份
如果不是,我的选择似乎是
1) 将其设置为从虚拟机内部运行(可能,但不方便)
2) 硬编码SQL用户名/密码,以只读方式访问数据库(根本不喜欢这种想法)
3) 单独添加主机的用户名以访问SQL数据库(实际上不可行)
4) 为主机的用户名添加整个用户组,使其对SQL数据库具有只读访问权限(可以接受,但开放的访问范围比我希望的要广得多)Windows身份验证不允许您输入用户+密码-这就是关键:Windows进行身份验证。如果您需要用户+密码,则需要设置SQL用户 确保登录到主机VM上的任何用户都可以访问SQL实例,并且它应该可以正常工作
不相关的旁注: 与此目的背道而驰:
如果你想要后期绑定,你应该声明
cn
和rs
为Object
变量。否则使用CreateObject
没有意义-只需New
就可以了,并删除对ADODB的引用!谢谢,这正是我需要知道的!
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")