問題描述
問題原因猜測與驗證
首先聲明,這兒的Login Failed不是什么SQL Server 服務沒起來之類的錯誤引起。一般的解決辦法是不行的,可能的原因筆者猜測是由於計算機名稱更改造成,最終在成功解決問題后發現確實如此。在安裝SQL Server默認實例時,筆者采用的認證模式是Windows驗證,而且用戶是本機的一個用戶帳戶(不是域帳戶),所以當機器名稱更改后就會導致無法連接,因為之前安裝的數據庫實例它認為用戶是之前的用戶,而且沒有sa用戶。
問題解決
幸好微軟提供了一個解決辦法PsExec,它允許你以NT AUTHORITY\SYSTEM賬號運行程序,和“常規”管理員賬號不同——具有天生訪問SQLServer的權限。(祥請參考連接http://blog.csdn.net/dba_huangzj/article/details/7927266)
下載PsExec地址:http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
注:PsExec是PsTools的一個組件
下載完成后以管理員身份打開CMD,並cd到PsTools的解壓目錄,然后運行如下命令
PsExec -s -i "C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe" 其中””中的內容為SSMS(SQL Server Management Studio)的路徑
接下來的操作也請參考上面的第一個連接(添加域帳戶和sa(如果你想)),在此不再贅述。
注意要先使的驗證模式為混合驗證模式,否則新建登陸帳號是不起作用的
拓展延伸
不得不說PsExec (PsTools)是一個好工具,以后出現無法登陸或連接的情況,可以用這個工具直接模擬登陸,然后想怎么建立用戶或修改權限都可以。
后續
后來又發現機器名稱更改后還會造成無法進行發布復制啊,坑爹啊,Google了一下,可以通過以下腳本解決此問題
USE MASTER GO SELECT @@SERVERNAME; SELECT SERVERPROPERTY('SERVERNAME') --如果這兩個結果不一致,說明機器改過名字,在配置復制的時候就會報上面的錯誤。 --要修復此問題 --執行下面的語句,完成后重新啟動SQL服務 IF SERVERPROPERTY('SERVERNAME') <> @@SERVERNAME BEGIN DECLARE @SERVER SYSNAME SET @SERVER = @@SERVERNAME EXEC SP_DROPSERVER @SERVER = @SERVER SET @SERVER = CAST(SERVERPROPERTY('SERVERNAME') AS SYSNAME) EXEC SP_ADDSERVER @SERVER = @SERVER, @LOCAL = 'LOCAL' END --最后別忘了重新啟動服務哦,啟動完后,再運行
記住:一定要重啟SSMS等相關服務