1

我正在使用 vbscript 尝试连接到另一个域上的 sql 服务器。该服务器是群集的一部分,并且是 SQL Server 数据中心版(64 位)。我可以从我的机器 ping 服务器。我正在使用 IP 地址进行连接,这在 SSMS 上运行良好。我正在使用的 vbscript 代码是:

Set cn = CreateObject("ADODB.Connection")
cn.Open "DRIVER={SQL Server};Server=123.456.345.567\instance;Database=MyDB;User
ID=domain\myuserid;Password=mypass;"
strCommandText = "Select * from mytable"
cn.Execute strCommandText

当我运行它时,我收到以下错误:Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'domain\myuserid'。

我无法将我的测试机器加入域,也无法使用 sql 身份验证,因为它在 sql server 上被禁用。

我需要做什么才能使其正常工作?

4

3 回答 3

6

查看您的查询字符串,我看到您正在指定用户名和密码,这意味着您正在提供 SQL 身份验证凭据。但是,在您的问题中,您声明 SQL 身份验证在 SQL 服务器中被禁用。

这就是您的 SQL 服务器不让您进入的原因。当您的服务器不期望它们时,您正在提供 SQL 身份验证凭据。

如果 SQL 身份验证被禁用,那么很可能您的服务器也没有处于混合模式身份验证中,这几乎意味着 SQL 服务器正在使用 Windows 身份验证进行登录。此配置超出您的控制范围,是您的 DBA 做出了选择。

因此,如果您要连接的 SQL 服务器使用 Windows 身份验证模式,您的查询字符串应该是:

cn.Open "DRIVER={SQL Server};Server=123.456.345.567\instance;Database=MyDB;Trusted_Connection=yes;"

然而,棘手的部分来了……如果您从属于 [DOMAIN_A] 的测试机器运行 VBScript,它将在 [DOMAIN_A] Windows 凭据下运行。但是,您的 SQL 服务器期望来自他加入的域的 Windows 凭据。我们称它为 [Domain_B]。

除非您的 AD 管理员在 [DOMAIN_A] 和 [DOMAIN_B] 之间建立了信任关系,否则尽管现在有正确的查询字符串,您的登录尝试仍然会失败。

如果您无法将测试机器加入 [DOMAIN_B],您如何解决这个跨域问题?简单的。使用“Runas”命令。

在加入 [DOMAIN_A] 的测试机器上,打开命令提示符并执行:

Runas /noprofile /netonly user:[DOMAIN_B]\myuserid %comspec%

它会要求你输入密码。输入您原来在查询字符串中的“mypass”密码。“myuserid”也是您原始查询字符串中的用户名。

完成此操作后,您将拥有一个新的命令提示符窗口,但如果您注意到它的标题,它现在正在您的 [DOMAIN_B] 凭据下运行。

尽管您的测试机器仍在加入 [DOMAIN_A],但您在此新命令提示符下执行的任何操作都将在您的 [DOMAIN_B] 凭据下执行。正是您的 SQL 服务器所期望的。

所以此时,剩下的就是在这个新的命令提示符窗口上运行 VBScript。这应该为 SQL Server 提供适当的凭据。

让我们知道这是否解决了问题。

于 2012-11-07T16:41:43.737 回答
1

据我所知,如果不加入域或使用 SQL 身份验证,则无法进行连接。您可能有幸通过虚拟加入域的 VPN 进行连接。

于 2012-10-26T15:03:09.147 回答
0

尝试更改您的连接字符串,特别是驱动程序提供者:

试试这个

提供者=SQLNCLI10;服务器=myServerAddress;数据库=myDataBase;Uid=myUsername;密码=我的密码;

以下是连接字符串示例: http: //www.connectionstrings.com/sql-server-2005#sql-server-native-client-10-0-oledb-provider

于 2012-10-26T15:02:46.243 回答