无法使用vbscript连接到不同域上的sql server

bea*_*man 1 sql sql-server vbscript connection-string adodb

我正在使用vbscript尝试连接到另一个域上的sql server.该服务器是群集的一部分,是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
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到以下错误:用于ODBC驱动程序的Microsoft OLE DB提供程序:[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]用户'domain\myuserid'登录失败.

我无法加入我的测试机器到域,我不能使用sql身份验证,因为它在sql server上被禁用.

我需要做些什么才能让它发挥作用?

don*_*tor 6

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

这就是为什么您的SQL服务器不允许您进入的原因.当您的服务器不期望它们时,您将提供SQL身份验证凭据.

如果禁用了SQL身份验证,则很可能您的服务器未处于混合模式身份验证中,这几乎意味着SQL服务器正在使用Windows身份验证进行登录.这种配置超出了您的控制范围,您的DBA就是这样做的选择.

因此,如果要连接的SQL Server使用的是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%
Run Code Online (Sandbox Code Playgroud)

它会要求您输入密码.输入您最初在查询字符串中输入的"mypass"密码."myuserid"也是原始查询字符串中的用户名.

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

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

所以在这一点上,剩下的就是在这个新的命令提示符窗口上运行VBScript.这应该为SQL服务器提供适当的凭据.

如果这解决了问题,请告诉我们.