2012-06-25 33 views
5

我在寫一個需要連接到SQL服務器以檢索一些信息的Windows服務。但是,服務器不允許我連接:login failed for user [domain/username]。奇怪的是,SSMS內部的一切都完好無損。我可以登錄,查詢數據庫,並且一切都完美無缺。只有通過Windows服務纔會拋出該錯誤。對於Windows服務SQL「登錄失敗,用戶[用戶名]」錯誤,但SSMS登錄工程

僅供參考,這裏是我使用的連接字符串:

Data Source=sqlserveraddresshere;Initial Catalog=databasenamehere;User ID=domain\username;Password=password`

我懷疑,這是相關的,但是當我嘗試使用集成安全性它讓我的計算機名稱,而不是我自己的用戶名。我99%肯定這是因爲我們的反病毒和監控軟件欺騙了我的Windows會話管理員用戶來完成其工作。在任何情況下,只要輸入正確的用戶名和密碼應該工作不管,對不對?

我看了一些涉及相同錯誤的其他問題,但他們都沒有關係。從我可以告訴誰可以通過SSMS進入的所有人都可以通過代碼訪問他們的SQL服務器。這是我能找到的最類似的問題,雖然它沒有多大幫助: Can't connect to SQL Server: "Login failed for user "."

另外,在你問之前,我已經檢查過TYPOS。其實,我甚至試圖使用其他用戶的帳戶,以確保我的權限沒有什麼奇怪的事情發生。如果你需要我發佈任何代碼,請告訴我。謝謝你的幫助!

UPDATE:

我改變了賬戶服務和切換回IntegratedSecurity = true。這似乎是有所改變,因爲現在我收到一個稍微不同的錯誤:

Cannot open database "mydatabase" requested by the login. The login failed. >Login failed for user 'MYDOMAIN\myUserName'.

+4

您可以檢查SQL事件日誌(在Management Studio中,展開服務器,展開管理,展開SQL Server日誌),併爲我們提供失敗登錄的完整錯誤?它應該包含錯誤編號,嚴重性和狀態。 –

+0

檢查SQL事件日誌幫助我瞭解了一些新內容:我嘗試訪問的服務器僅配置了Windows身份驗證。但是,當我使用WA時登錄仍然失敗,因爲它仍然發送我的計算機名稱而不是帳戶名稱。我會做更多的研究來嘗試解決這個問題。 以下是完整的錯誤(帶有匿名憑據):用戶'DOMAIN \ MACHINE_NAME $'失敗。原因:基於令牌的服務器訪問驗證因基礎結構錯誤而失敗。檢查以前的錯誤。 [客戶端:10.1.0.188] – VVander

+0

錯誤是否在您發佈的消息上面有嚴重性**和**狀態**值? –

回答

6

它的工作!最後!

首先,使用Kevin的建議(原始問題下的註釋),我檢查了SQL Server日誌(在Management Studio中,展開服務器,展開管理,展開SQL Server日誌)。這是我發現更冗長的錯誤報告,幫助我診斷問題。

事實證明,服務器不允許除Windows身份驗證之外的任何內容,所以這就是我嘗試手動輸入UN/PW失敗的原因。

但是,我仍然有服務器傳遞我的機器名稱作爲用戶而不是我的用戶名的問題。用Duncan's suggestion修改了服務運行的用戶名稱(右鍵單擊Services-> Properties-> Log On Tab),修復了這個問題。

感謝大家的幫助,非常感謝。

+0

要添加到VVander的答案,請在登錄選項卡上選擇「此帳戶」單選按鈕,然後單擊瀏覽。輸入「你的名字」,系統將執行AD搜索以認證用戶名。然後輸入你的系統密碼並申請。您應該收到類似「系統接受此服務的用戶名/密碼」的消息。而已。它會工作。 – bluwater2001

0

什麼是您傳遞給SQL Server登錄的用戶名?根據連接字符串,它看起來像是使用文字「域\用戶名」作爲用戶。密碼應該更新爲正確的密碼,而不是文字「密碼」。

當我開始編寫C#編寫數據庫支持的應用程序時,我得到了這個錯誤。我的應用程序有一個混合模式環境,並且我傳遞了SQL Server用戶名和密碼,而不是用於登錄到我的計算機的內容。這是我喜歡強制執行的安全策略,以便數據庫控制可以登錄的用戶以及他們獲得的權限。這是否適合你想要做的?如果是這樣,我可能會提供更好的幫助,以及更具體的代碼。

+0

對不起,如果我沒有在原始問題中說清楚。發佈之前,我更改了連接字符串中的值。在我的程序中,我實際上使用了應該有權訪問服務器的用戶名和密碼。 – VVander

+0

當我今晚回家時,我會發布我的連接字符串,我用我的應用程序。它被設置爲使用SQL Server身份驗證,但我認爲它應該作爲任何類型身份驗證的起始模型。 – EastOfJupiter

+0

謝謝,任何幫助表示讚賞。雖然我一直在使用connectionstring.com的例子以及在.NET中使用MS的ConnectionStringBuilder類,但是如果你的字符串不同,它可能會有所幫助。 – VVander

2

您需要檢查服務正在運行的用戶帳戶。通過它的運行聲音,它會以Local System的方式運行,它將嘗試通過機器名稱作爲登錄名。

嘗試將其更改爲權限最低的域用戶(或者用於測試,您可以使用自己的帳戶),然後授予該用戶登錄到SQL Server的權限。這應該夠了吧。

+0

好的,我更改了服務的帳戶,並切換回IntegratedSecurity = true。它似乎有些變化,因爲現在我收到一個稍微不同的錯誤: 無法打開登錄所請求的數據庫「mydatabase」。登錄失敗。用戶'MYDOMAIN \ myUserName'登錄失敗。 我也將這個添加到原始問題中。 – VVander

+0

您可能需要爲登錄創建一個數據庫用戶。右鍵單擊SSMS中對象資源管理器中的登錄,然後檢查左側窗格中的用戶映射。或者,您可以針對數據庫運行'CREATE USER [blah] FOR LOGIN [login]' –

+0

最後我發現我輸入的數據庫名稱錯誤,這就是爲什麼您的建議一開始並不奏效,並給了我這個錯誤。這雖然可以幫助其他人。 – VVander