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上被禁用.
我需要做些什么才能让它发挥作用?
查看您的查询字符串我看到您正在指定用户名和密码,这意味着您正在提供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服务器提供适当的凭据.
如果这解决了问题,请告诉我们.