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

Abi*_*hur 2 sql-server excel vba

我在用户拥有两个单独帐户的环境中工作。用户将它们登录到主机上,然后使用另一台主机来访问带有特殊软件的虚拟机。

其中一台虚拟机有一个 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
Run Code Online (Sandbox Code Playgroud)

我知道原因是用于登录主机的用户名没有(也不应该)具有访问 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
Run Code Online (Sandbox Code Playgroud)

这确实让我输入了唯一的用户名/密码,但是当我给它正确的域帐户时,我收到一条错误消息:

“用户登录失败...原因:尝试使用 NT 帐户名进行 SQL Server 身份验证

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

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

1)设置为让他们从虚拟机内运行它(可能,但不方便)

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

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

4) 添加主机用户名的整个用户组,以便对 SQL 数据库具有只读访问权限(可以忍受,但开放的访问权限比我希望的更广泛)

Mat*_*don 5

Windows 身份验证不会让您输入用户名+密码 - 这就是重点:Windows进行身份验证。如果你想要用户+密码,你需要设置一个SQL用户。

确保登录到主机虚拟机的任何用户都可以访问 SQL 实例,并且它应该可以正常工作


不相关的旁注,这个:

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Run Code Online (Sandbox Code Playgroud)

违背了这样做的目的:

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Run Code Online (Sandbox Code Playgroud)

如果您想要后期绑定,您应该将cn和声明rsObject变量。否则,使用就没有意义CreateObject——只要New这样,如果这些声明编译通过,项目必然有对 ADODB 的引用!