我在一个用户有两个独立帐户的环境中工作。一个将它们记录到它们的主机中,然后它们使用单独的一个来访问具有特殊软件的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数据库的只读访问权限(可以容忍,但可以开放访问比我更喜欢的更广泛的基础)
答案 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")
如果您想要延迟绑定,则应将cn
和rs
声明为Object
个变量。否则,使用CreateObject
毫无意义 - 只需New
,并删除对ADODB的引用!