2012-10-26 27 views
1

我正在使用vbscript嘗試連接到另一個域上的sql服務器。該服務器是羣集的一部分,並且是SQL Server數據中心版(64位)。我可以從我的機器上ping服務器。我正在使用IP地址連接在SSMS上正常工作。 我使用VBScript代碼是:無法使用vbscript連接到不同域上的sql服務器

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驅動程序:[微軟] [ODBC SQL Server驅動程序] [SQL服務器]用戶'domain \ myuserid'登錄失敗。

我無法將我的測試機器加入到域中,並且我無法使用sql認證,因爲它在sql server上被禁用。

我需要做些什麼才能使其發揮作用?

回答

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;"

但是這裏來了棘手的部分...如果您運行的VBScript中來自屬於[DOMAIN_A]一部分的測試機器,它將在[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服務器提供適當的憑據。

讓我們知道是否解決了這個問題。

+0

太棒了!這終於是我正在尋找的答案。正如你所說的,我認爲當服務器期望SQL Server服務器時,我傳遞了我的Windows憑據。我運行了命令,現在我可以連接了!謝謝DonHector,你救了我的命! – bearaman

0

試着改變你的連接字符串,特別是司機提供商:

給一個試試這個

提供商= SQLNCLI10;服務器= myServerAddress;數據庫= MyDatabase的; UID =名爲myUsername; Pwd = myPassword;

這裏有conenction字符串的例子: http://www.connectionstrings.com/sql-server-2005#sql-server-native-client-10-0-oledb-provider

+0

感謝您的回覆,但沒有奏效。從我看到的情況來看,如果你不是一個成員,就不容易連接到另一個域。我會繼續搜索,看看是否有其他解決方案。 – bearaman

1

據我所知,還沒有到沒有加入域或使用SQL身份驗證連接的選項。您可能可能有幸通過您虛擬加入域的VPN連接。

+0

感謝您的回覆。 VPN不適合我。當然,必須有辦法連接到不在同一個域上的遠程SQL服務器? B. – bearaman

+0

這就是SQL Server身份驗證(又名混合模式)的用途。有沒有辦法說服DBA使用SQL Server身份驗證爲您提供有限的訪問? –