天天看點

SQL Server 2005 連接配接本地端口1433開啟遠端連接配接/登陸18456錯誤的解決方法

SQL Server 2005 連接配接本地端口1433開啟遠端連接配接/登陸18456錯誤的解決方法

作者:Jimmy Li

關鍵詞:遠端連接配接,無法連接配接,1433,SQL SERVER 2005,18456錯誤

------[連載之電子商務系統架構]通路量超過100萬的電子商務網站技術架構

一、SQL SERVER 2005 登陸18456錯誤的解決方法

   很多朋友使用MSsql的時候本機能夠正常登陸SQL2005的SQL Server Management Studio。

但是遠端無法登陸1433,SQL Server 2005無法遠端連接配接到1433。SQL(Microsoft SQL Server 2005 )登入不上去了,原來是出現了幾個小問題,現在記錄一下我的解決這幾個情況的辦法。(解決方法有很多種,這些隻是我的解決方法,僅供參考)

錯誤提示:

标題: 連接配接到伺服器

------------------------------

無法連接配接到 192.1.1.19。

其他資訊:

使用者 'shop' 登入失敗。 (Microsoft SQL Server,錯誤: 18456)

按鈕:

确定

查找問題的過程:(注:用windows賬号還是可以登入的)

第一步: 啟動所有與SQL有關的服務,問題依舊;(後證明與服務無關,隻是為排除錯誤)

第二步: 檢視windows防火牆,被預設啟動了,不啟動選擇項被Disabled

兩個提示“由于安全考慮,某些設定由組政策控制”“Windows防火牆正在使用您的域設定”,先用gpedit.msc打組政策編輯器,機算機配置-- 管理模闆--網絡--網絡連接配接--Windows防火牆--标準配置檔案,檢視右邊各選項屬性,都是未配置狀态,問題不在這裡。

另外一個提示中提到域設定,域設定不可能禁用SQL Server,并且我檢視本地開放端口(net start ),25,1433,1434都是開發狀态。

暈,會不會是密碼錯誤?

問題一、忘記了登入Microsoft SQL Server 2005 的sa的登入密碼

解決方法:先用windows身份驗證的方式登入進去,然後在‘安全性’-‘登入’-右鍵單擊‘sa’-‘屬性’,修改密碼點選确定就可以了。

問題二、已成功與伺服器建立連接配接,但是在登入過程中發生錯取。(provider:共享記憶體提供程式,error:0-管道的另一端上無任何程序。)(Microsoft SQL Server,錯誤:233)

解決方法:打開‘程式’-‘所有程式’-‘Microsoft SQL Server 2005 ’-‘配置工具’-‘SQL Server 配置管理器’,在彈出的窗體中,找到‘SQL Server 2005 網絡配置’,把‘MSSQLSERVER的協定’下的“Named Pipes”和“TCP/IP”啟動,然後重新啟動Microsoft SQL Server 2005就可以了。

問題三、無法打開使用者預設資料庫。登入失敗。使用者‘sa’登入失敗。(Microsoft SQL Server, 錯誤:4064)

解決方法:先用windows身份驗證的方式登入進去,然後在‘安全性’-‘登入’-右鍵單擊‘sa’-‘屬性’,将預設資料庫設定成master,點選确定就可以了。

這時還是不行,後來才知道一個最暈的問題,伺服器名是“計算機/執行個體名”,FFC50E78A6DF423/server2005 這次全好了,呵呵。

二、更新到2005時出現18456問題的解決方法

在幫一個使用者進行系統從Sql2000更新到Sql2005的過程中,遇到了幾個問題,因前段時間同時忙于幾個項目,沒能及時把問題解決方法整理下來。這段時間有些輕松了,更新一下我的blog希望能幫助朋友們解決實踐中的問題。

問題描述:

      在更新Sql2000的DTS包的時候,試着手工執行了幾次,突然系統報18456錯誤,提示資訊是“無法連接配接到×××伺服器”,其他資訊為“使用者‘sa’登入失敗。(Microsoft SQL Server,錯誤:18456)”。

問題原因:

      更新Sql2000的DTS包是這次資料庫系統整體更新的一部分。除此之外,系統硬體進行了更新,新更新的系統伺服器加入到了使用者機構的域中,并更改了資料庫sa的使用者密碼。

      原DTS的資料包是儲存了原Sql2000資料庫庫系統的使用者憑據,密碼自然是原先的資料庫密碼。在試運作DTS包之前伺服器管理者剛剛把新更新成功的資料庫伺服器加入域。

      使用者機構的域是設定了“密碼政策”。Sql Server 2005的sa使用者預設是啟用了“強制實施密碼政策”。而一般預設的Windows帳戶密碼政策或者AD(域帳戶)密碼政策都是3-6次錯誤密碼登陸失敗後,系統暫時當機該使用者。當機的時間要看系統設定的長短。

   該問題就出在DTS用錯誤的sa密碼(舊的sa密碼)多次試圖通路系統,而sa的“強制實施密碼政策”起了作用。

圖解:

   sa帳戶被鎖定,原因是sa的帳戶啟用了“強制實施秘密政策”,或者“強制過期”。在登入使用者sa的登入屬性對話框中,能看到改選項是否標明狀态。如下圖所示:

     選中“強制實施秘密政策”後,sql server2005 會調用windows或者域的帳戶管理政策。如果是windows的帳号管理政策,可以通過“控制台”的“本地安全設定”中看到“帳戶政策”情況,其中的“密碼政策”可以設定使用者秘密的失效時間、長短等,另外在“帳戶鎖定政策”可以設定“帳戶鎖定門檻值”,即帳戶用錯誤的密碼嘗試登入幾次,系統即自動鎖定該帳戶。可以參考上圖。

      如果sql server的帳号已經被鎖定,在該帳戶的登入屬性裡面能看到所示的sql server帳戶被鎖定。

    隔一定時間後,遇到的問題是因為,舊有的DTS包中設定的連結還是舊資料庫的sa密碼,當多次測試執行該DTS時,已經超過了嘗試sa錯誤密碼的次數,造成了所示的sql server帳戶被鎖定。

    這是即使用內建windows的帳戶登入sql server,取消“登入已鎖定”的勾選。再重新用sa的正确密碼登入sql server時,也會出現18456的錯誤。如圖所示。這是因為sa的密碼需要重新設定。再次用內建windows的帳戶登入sql server的帳戶登入sql server進行sa的密碼重新設定,即可解決問題。

       總結:

       第一,如果資料庫安全性沒有特殊的要求,去掉圖所示的“強制實施秘密政策”勾選,能避免該類問題的發生。

       第二,從舊系統資料庫更新上來的DTS,盡快修改舊連結的sa登入密碼,保證系統帳戶登入認證不會出問題,同時保證DTS能正确執行。

三、SQL Server 2005 連接配接本地端口1433開啟遠端連接配接

剛裝的SQL server2005資料庫,預設是關閉遠端連接配接。安裝完成後一般無法直接連接配接端口1433,此時連接配接一般會失敗。 現在把在裝完程式後,連接配接端口1433前,要做的幾件事情和注意事項總結一下。

開啟步驟:

1.關閉資料庫引擎,關閉資料庫引擎有三種方法:

開始->程式->Microsoft SQL Server 2005->配置工具->SQL Server Configuration Manager,選中SQL Server 2005服務中SQL Server(MSSQLSERVER) ,并選中右擊,點選停止, 即可關閉資料庫引擎。

補充注意點:

有時候在啟動資料庫引擎的時候可能會出現錯誤,不能啟動,這時就要檢視"SQL Server 2005配置管理器"中的SQL Server 2005網絡配置->MSSQLSERVER協定中的VIA是否已啟用,如果已啟用,則把它禁止.然後再執行上述一種方式操作就可以了.

2.配置伺服器端和用戶端的TCP/IP協定:

配置工具->SQL Server Configuration Manager->MSSQLSERVER的協定

看看TCP/IP協定是否啟動,如果啟動,右鍵菜單點"屬性" ,在分頁菜單中選"IP位址",把"IP1"和"IP2"中"TCP端口"為1433,"已啟用"改為"是"

修改SQL Server的TCP/IP下端口設定,輕按兩下“SQL2005的協定”下“TCP/IP”,把“IP位址”下“IPALL”的端口都改為“1433”。

配置工具->SQL Server Configuration Manager->SQL Native Client 配置->用戶端協定->TCP/IP

選擇TCP/IP右鍵菜單中"屬性",确認"預設端口"是1433,"已啟用"為"是"

3.開啟資料庫引擎

4.連接配接端口1433

開始–>輸入cmd –>回車–>telnet localhost 1433->回車

出現黑屏,表示本機連接配接端口1433成功 。

正确的順序是:(1)關資料庫引擎,

(2)配置伺服器端和用戶端的TCP/IP協定,

(3)啟動資料庫引擎,

(4)連接配接端口1433。

近日碰到一問題,程式無法查找到sqlserver的1433端口,sqlserver的網絡實用工具裡配置的沒錯,但是的确找不到,在指令提示符裡輸入:netstat -na ,一樣看不到這個端口,重新開機sqlserver服務也不行,不知道咋回事,後來再一次重新開機,突然間可以……

程式使用JDBC方式通路SQL Server 2005

SqlServer端口:1433,1434

要通路SqlServer,可以使用JDBC方式通路。

driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"

url="jdbc:microsoft:sqlserver://localhost:1433;User=sa;Password=;DatabaseName=maxwell"

這段時間要使用sqlserver,偶望文生義,以為在防火牆打開1433端口即可,誰知隻打開這個端口怎麼都不行,後來Google一下,才知道,還需要一個端口,留作筆記。

TCP-1433

UDP-1434

SQLSERVER端口是如何被ADO找到的?

問題:

把SQLSERVER的端口設定成1499,然後在程式中定義ADO的連接配接字元串:DRIVER={SQL Server};SERVER=127.0.0.1,1499,能夠聯接上去,如果是DRIVER={SQL Server};SERVER=127.0.0.1,1433,就聯接不上去,問題是如果我定義成:DRIVER={SQL Server};SERVER=127.0.0.1 不加端口,也可以聯接上去,ADO是怎麼得到SQLSERVER的端口的呢?

回答:

用戶端連接配接到伺服器時,應用程式請求連接配接遠端計算機,dbnetlib.dll 将打開到連接配接中所指定的計算機網絡名上的 UDP 端口 1434 的連接配接。所有運作 SQL Server 2000 的計算機都監聽此端口。當一個用戶端 dbnetlib.dll 連接配接到該端口時,伺服器将傳回一個監聽伺服器上運作的所有執行個體的資料包。對于每個執行個體,該資料包報告該執行個體正在監聽的伺服器 Net-Library 和網絡位址。應用程式計算機上的 dbnetlib.dll 收到該資料包後,選擇在應用程式計算機和 SQL Server 執行個體上都啟用的 Net-Library,然後連接配接為此資料包中的 Net-Library 列出的位址。

通過1434端口傳輸特定的UDP資料包,然後伺服器開始回應,所有這些都是明文傳輸的,我們可以很容易探測一個IP位址的1434端口,獲得該IP位址上運作的SQL Server的相關資訊。這些資訊包括:主機名稱、執行個體名稱、版本、管道名稱以及使用的端口等。這個端口是微軟自己使用,而且不象預設的1433端口那樣可以改變,1434是不能改變的

另外:以後遇到此問題,可以使用冰刃工具檢視作業系統各個端口的使用,還可以檢視sqlserver的系統日志。

最後,建議每次遠端連接配接SQL2005完成後,都從資料庫的菜單項,右擊選擇“斷開連接配接”,如圖

     本文轉自jimmy_lixw 51CTO部落格,原文連結:http://blog.51cto.com/jimmyli/915856,如需轉載請自行聯系原作者