【问题标题】:Unable to use vbscript to connect to sql server on different domain无法使用 vbscript 连接到不同域上的 sql server
【发布时间】:2012-10-26 14:43:49
【问题描述】:

我正在使用 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 提供程序 ODBC 驱动程序:[Microsoft][ODBC SQL Server Driver][SQL Server]用户 'domain\myuserid' 登录失败。

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

我需要做什么才能让它工作?

【问题讨论】:

    标签: sql sql-server vbscript connection-string adodb


    【解决方案1】:

    查看您的查询字符串,我看到您正在指定用户名和密码,这意味着您正在提供 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 服务器提供适当的凭据。

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

    【讨论】:

    • 太棒了!这终于是我一直在寻找的答案。正如你所说,当服务器期待 sql server 时,我认为我正在传递我的 Windows 凭据。我运行了命令,现在可以连接了!谢谢 DonHector,你救了我的命!
    【解决方案2】:

    据我所知,没有加入域或使用 SQL 身份验证的连接选项。您可能有幸通过虚拟加入域的 VPN 进行连接。

    【讨论】:

    • 感谢您的回复。 VPN对我来说不是一个选择。当然必须有一种方法可以连接到不在同一个域上的远程 sql 服务器? B.
    • 这就是 SQL Server 身份验证(又名混合模式)的用途。有没有办法说服 DBA 使用 SQL Server 身份验证为您提供有限的访问权限?
    【解决方案3】:

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

    试试这个

    Provider=SQLNCLI10;Server=myServerAddress;Database=myDataBase;Uid=myUsername; 密码=我的密码;

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

    【讨论】:

    • 感谢您的回复,但没有奏效。据我所知,如果您还不是会员,连接到另一个域并不容易。我会继续搜索,看看其他解决方案是否有效。
    猜你喜欢
    • 2016-07-18
    • 2013-03-15
    • 2018-08-30
    • 2020-05-22
    • 2015-08-29
    • 2016-11-08
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多