Excel使用VBA通过Windows身份验证连接到SQL

时间:2015-08-25 16:01:16

标签: sql-server vba excel-vba excel

我在一个用户有两个独立帐户的环境中工作。一个将它们记录到它们的主机中,然后它们使用单​​独的一个来访问具有特殊软件的VM。

其中一个虚拟机有一个SQL数据库,用于记录他们希望能够从主机上安装的excel访问的警报。我已经测试了以下代码,它在我的测试虚拟机上工作正常,但它从主机虚拟机失败了。

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身份验证

。 有没有办法提示用户运行我的宏使用Windows身份验证提供用户名/密码,与他们登录时不同?

如果不是,我的选择似乎是

1)设置它们以便在VM中运行它(可能,但不方便)

2)硬编码一个SQL用户名/密码,对数据库具有只读权限(完全不喜欢这个)

3)单独添加主机用户名以访问SQL数据库(不太可行)

4)为主机的用户名添加整个用户组,使其具有对SQL数据库的只读访问权限(可以容忍,但可以开放访问比我更喜欢的更广泛的基础)

1 个答案:

答案 0 :(得分:1)

Windows身份验证不允许您输入用户+密码 - 这就是重点: Windows 进行身份验证。如果您需要用户+密码,则需要设置SQL用户。

确保在您的主机上登录的任何用户VM都可以访问SQL实例,并且只能正常工作

无关的旁注,这:

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

击败目的:

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

如果您想要延迟绑定,则应将cnrs声明为Object个变量。否则,使用CreateObject毫无意义 - 只需New,并删除对ADODB的引用!

相关问题