Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Excel使用VBA通过Windows身份验证连接到SQL_Sql Server_Vba_Excel - Fatal编程技术网

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

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

我在一个用户拥有两个独立帐户的环境中工作。其中一个将其登录到主机,然后使用单独的主机使用特殊软件访问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身份验证

。 是否有一种方法可以提示运行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")