前言
SQL Server 2005 Express版本(以上簡稱SSE),雖然是SQL Server 2005精簡版本,不過如果你的資料庫的使用需求簡單,且資料產生的量也不大,它是一個不錯的資料庫軟體,可以列入考慮。可能你會說,我可以直接使用MySQL之類資料庫軟體,嗯嗯,這也是一種不錯的方向,其實這都不是重點,重點是:「黑貓,白貓,會爬老鼠的就是好貓。」能解決你的問題就是好資料庫軟體,管它是使用Excel、Access、MySQL、Oracle、SQL Server…。當然,這隻黑貓、白貓其中還有需多要考慮的重點:效能、維護、資源、工具、文件、支援、服務…等多個面向考慮,最後選擇一個最符合你需求的資料庫軟體即可。
我先說說我為何選擇SSE來做為我的資料庫,
- 因為它是免費。(與MySQL…相同)
- 我使用是Windows平台。
- 我使用的程式語言為Visual Basic。
- 我寫的是ASP.NET(*.aspx)網頁。
- 容易與開發工具整合與管理。
除了第一點是比較沒有說服力之外,還有一點,因為是精簡版的關係,所以當然會有一些進階版本的功能是你無法使用的,但基本上MySQL是沒有這些限制的。但我在開發*.aspx時,使用SQL Server是非常方便的,Microsoft提供的工具(Visual Studio…)可以很方便與SQL Server做整合、管理…等等的工作。
SSE的限制
- CPU數目:1
- 記憶體上限:1 GB
- 64位元支援:Windows on Windows (WOW)
- 資料庫大小:4 GB
SQL Server 2005各版本的差異,可以參考這裡。
其中比較要注意的是「資料庫大小」這一個項目,Express版本的4 GB限制是指「單一個DataBase檔案」,如我們常當成範例的Northwind(北風資料庫),在Express版本中的資料庫大小會有4 GB的限制,所以你可以多開幾個資料庫檔案來運用而避開這項限制。
限制歸限制,但MS還是提供了一些額外的Express工具讓使用者來擴充SSE的功能,包括:
- Microsoft SQL Server 2005 Express Edition with Advanced Services Service Pack 2
- Microsoft SQL Server 2005 Express Edition Toolkit Service Pack 2
- Microsoft SQL Server Management Studio Express Service Pack 2 (SSMSE)
- Advanced Services
包含SSMSE、支援全文檢索目錄(FullTextSearch)、支援經由報表服務(Report Service)來檢視報表。 - Toolkit Service
提供了額外的工具與資源來管理SQL Server 2005 Express版本,它也支援經由報表服務建立報表,包含工具:- Connectivity Components
- Business Intelligence Development Studio
- Software Development Kit
- Management Studio Express
- SQL Server Management Studio
這個工具是用來管理SQL Server 2005 Express版本的資料庫。
註:如果你的網站只是存放「文字型資料」,基本上4 GB應該可以讓你使用一段很久的時間,我前陣子看一篇「數位之牆的十一年浩劫」的文章,當然,這篇文章讓我們從事資訊工作的人有所警惕,其中提到,一個經營11年的網站備份出來的資料檔大小不過40MB左右,而我所服務的公司,經營一個討論區約有1萬1千篇文章,資料檔大小也才13.5MB左右。如果再利用我上述提到的「多開幾個資料庫檔案」的技巧,這個SSE版本的資料庫,應該是相當實用。實作環境
我只有一台主機,所以我使用VMWare來架設第二台主機,當成DataBase Server。
Host1
- OS:Windows XP Professional SP3
- Name:Bruce
- IP:192.168.254.100/24
- 這台XP主機主要是模擬成Server,主要是架設成.NET Framework 3.5的環境加上SSMSE,模擬連線到遠端SQL主機。
Host2
- OS:VMWare Server ConSole 1.0.6 for Windows XP Professional XP3
- Name:VMBruce
- IP:192.168.254.103/24
- 主要安裝SSE,當成DataBase Server,我還會教大家做簡單的防火牆設定,以防SQL 1433 port的攻擊。
事前準備
- .NET Framework 3.5環境
Microsoft .NET Framework 3.5、Microsoft .NET Framework 3.5 語言套件,下載後安裝在主機Bruce。- 2008年08月已更新到3.5 Service Pack 1,可以直接下載後安就,Microsoft .NET Framework 3.5 Service pack 1。
- 如果電腦是第一次安裝.NET Framework,直接下載3.5 sp1套件安裝,它會幫你把2.0、3.0、3.5全部安裝起來。
- 2008年08月已更新到3.5 Service Pack 1,可以直接下載後安就,Microsoft .NET Framework 3.5 Service pack 1。
- SQL Server 2005 Express資料庫軟體
Microsoft SQL Server 2005 Express Edition Service Pack 2,下載後安裝在主機VMBruce。註:如果你如我一樣有在開發*.aspx或其他.NET程式,那你也可以到 Visual Studio 2008 Express Editions,在畫面中選擇你需要的語言工具(例如最下方:Offline Install-->Chinese (Traditional)-->Download),即可下載ISO檔,然後使用DVD燒出來後安裝Visual Studio 2008 Express工具,會自動安裝以上1、2所有軟體。
- SSE管理工具(SSMSE,資料庫管理工具)
Microsoft SQL Server Management Studio Express Service Pack 2,下載後安裝在主機Bruce、VMBruce。注意,VMBruce安裝SSMSE前,最少要先行安裝.NET Framework 2.0相關套件。 - SQL Server 2005 線上叢書
SQL Server 2005 線上叢書 (2007 年 9 月),這是完整的一本技術手冊,你在坊間買書,可能查不到的資料這裡面都有,如果你有心想了解及發揮SQL Server的實力,這一定要下載安裝來看。關於SQL Server,有問題,有不了解,或是在看書,做實例不清楚…反正先查它就對了。
關係圖
Bruce (Web Server, SSMSE) <------> VMBruce (SSE, SSMSE)
VMBruce這台主機就是單純的一台DataBase Server,我們在VMBruce必須先使用SSMSE工具先做本機連接測試,然後做一些設定的修改,讓VMBruce這台主機開放遠端連線的權限。在來透過Bruce主機的SSMSE工具來實作遠端連線到VMBruce的資料庫來進行管理的工作。再進一步透過Bruce主機寫一個*.aspx的ADO.NET程式透過網頁來進行遠端的資料庫連接及存取的動作。
如果你看買過很多動態網頁程式教學的書籍(我就是!@.@),你會發現所有的書籍都只會教你在本機架設一個網站,不管是IIS+ASP、IIS+ASP.NET、IIS+PHP、Apache+PHP+MySQL…,最後你只會在本機寫程式,做管理,然後再上傳到一台Web與DataBase在同一台Server上,但實務上會建議把Web的主機與Database的主機是分開在不同主機及網路上,這樣的架構可以很彈性的架設出一個較大型的網路應用服務(當然這還是跟需求有關:效能、錢錢、使用情況…)。
服務名稱及驗證模式
在開始前最後一件事,要提醒大家「服務名稱」及「驗證模式」這件事。你可以在同一部電腦中安裝多次的SQL Server引擎,而每次安裝稱為一個執行個體(instance),每個執行個體都有一個名稱來辨別,如果你是使用Visual Studio Express相關工具安裝SSE,那預設資料庫執行個體的名稱為「SQLEXPRESS」(你在執行工具或撰寫程式時,大小寫都可以)而且驗證模式預設為「Windows驗證模式」,且只充許本機的連線,如果要充許遠端連線還需要額外的設定。如果你是獨立安裝SSE,則系統在安裝時會讓你選擇驗證模式,你可以選擇「Mixed Mode, 混合模式」會比較有彈性,如此便能讓別的主機來連線或管理。
在連線到資料庫時,在SSMSE的「伺服器名稱」或ADO.NET的「Data Source」你會發現格式為:「主機名稱\資料庫服務名稱」,例如:「VMBruce\SQLExpress」,如果是在同一台電腦主機,則主機名稱可用「.」來代替,例:「.\SQLExpress」,如果是使用遠端連線則主機名稱則使用IP Address來代替,例:「192.168.254.103\SQLExpress」。
- Windows驗證模式
Windows驗證接受使用者在登入Windows時獲得驗證,然後再傳送安全性憑證給SSE。而使用者的帳號和密碼只保留在Windows中。當ASP.NET使用Windows驗證時,連接字串不會提供帳號及密碼,只提供使用Windows驗證的指示。適合本機連接使用。 - SQL驗證模式
SQL驗證使用儲存在SQL Server中的資料來做使用者驗證。在連接時需提供「使用者名稱」及「密碼」來進行驗證。適合遠端連線使用。 - 混合模式
可以自行選擇使用Windows驗證或SQL驗證。
獨立安裝SSE
如果你是獨立安裝SQL Server 2005 Express資料庫,在安裝時有幾點要注意的地方。
- 「具名執行個體」的地方可以修改成任何你想要的名稱,其實這個執行個體名稱我是建議可以修改,如果有莫名的人要求連接時除了IP Address外,他也要完全猜對這個執行個體名稱,才有辨法連接,可以提升一些安全層級,我們測試上就使用預設SQLExpress即可,如果是正式對外的伺服器,還是修改一下的好。
遠端連線一:使用SSMSE連接
這裡我們預設你使用VS2008安裝起來的環境,我們先從測試本機連線,然後修改設定讓SSE開放遠端連線的權限。(這裡為了測試方便,先關閉VMWare中XP的防火牆)
先到VMBruce這台主機:
- 開始 --> 所有程式 --> Microsoft SQL Server 2005 --> SQL Server Management Studio Express --> 出現「連接到伺服器」,「伺服器名稱」因為我們是本機連接,所以預設值是「.\SQLEXPRESS」,「驗證」因為我們還沒修改設定,所以只能以「Windows驗證」來連接,按下「連接」來連接到本機執行個體名稱為SQLEXPRESS的資料庫。
- 確認sa的相關設定:由最上層 .\SQLEXPRESS --> 安全性 --> 登入 --> sa --> 右鍵 --> 屬性 --> 一般:請一定一定要設定一個「強壯的密碼」
--> 狀態 --> 登入:請選擇「已停用」,表示這個sa使用者不能由遠端登入。sa使用者的圖形會多一個紅色向下的箭頭。 - 建立一個可遠端連線的使用者:在sa上層的「登入」點選 --> 右鍵 --> 點擊「新增登入」。
1、我們建立一個「kkbruce」的使用者,選擇「SQL Server驗證」,密碼是「12345」,注意,我們是為了測試方便去除下方的「強制執行密碼原則」,正常情況下最少請保留這個勾選。
2、「伺服器角色」請在加勾選「sysadmin」。
3、「使用者對應」是選擇這個使用者登入後可使用的資料庫。
4、「狀態」請確認「連接到Database Engine的權限:授於」與「登入:已啟用」。最後按下「確定」新增完成。可先離開本機SSMSE管理工具。
- 開始 --> 所有程式 --> Microsoft SQL Server 2005 --> 組態工具 --> SQL Server介面區組態
- 點擊下方「服務和連接的介區組態」
1、SQLEXPRESS --> Data Engine --> 服務 --> 服務狀態:正在執行。(基本上如果你有做任何修改設定的動作,請來這裡按下方的「停止」再按「啟動」,讓SSE可以重新讀取新的設定。也可在「組態管理員」中設定,下一節介紹。)
2、SQLEXPRESS --> Data Engine --> 遠端連接 --> 請選擇「本機和遠端連接:只使用TCP/IP」。
3、SQL Server Browser --> 服務 --> 預設是「停止」,請點擊「啟動」。
設定完成,可離開SQL Server介面區組態。 - 開始 --> 所有程式 --> Microsoft SQL Server 2005 --> 組態工具 --> SQL Server 組態管理員,你可以在組態管理員中直接對相關服務進行「重新啟動」等相關動作。
- 請先確認「SQL Server 網路組態 --> SQLEXPRESS通訊協定 --> 右方的「TCP/IP:已啟用」然後在TCP/IP上按右鍵 --> 內容 --> 選擇「IP位址」,重點在那個「IPALL」的選項中,請先刪除「TCP動態通訊埠」中的值,然後在「TCP通訊埠」中鍵入:「1433」。
- 完成後,回到「SQL Server 2005 服務」中「重新啟動」兩項服務。
按下「連接」:
是否有看到原本主機名稱的地方現在出現的是「遠端主機IP Address」,代表遠端連接成功。
遠端連線二:使用ASP.NET For ADO.NET連接
在Bruce這台主機執行以下步驟:
- 開啟Visual Web Developer 2008 Express開發工具
- 檔案 --> 新網站 --> ASP.NET網站 --> 檔案系統 --> D:\WebSite1\ (路徑可自訂)--> 確定
- 在點選右方的「資料庫總管」--> 資料連接 --> 右鍵 --> 加入資料連接
connectionString="Data Source=192.168.254.103\SQLEXPRESS;Initial Catalog=Northwind;User ID=kkbruce;Password=12345"基本上這個connectionString是不安全的,因為這個字串內的資料是完全明碼的存在於Web.conf或*.aspx之中,應該在本機測試完成後,上傳到實際運作的伺服器後實行"加密"的步驟。不過"加密"離遠端連線主題太遠了,有空再聊。
防止1433 port攻擊
我們使用MS內建Windows 防火牆(Windows Firewall/Internet Connection Sharing (ICS))來防止SQL Server 1433 port的攻擊。為什麼會有1433 Port的攻擊呢?在早期的SQL Server中有一個不需密碼的使用者"sa",而這個使用者又偏偏在SQL Server有極大的權利,可以呼風喚雨,而我們這些SQL Server安裝後設定的預設服務Port就是1433,而駭客們就是使用"人性=懶=惰性"的漏洞,許多的資料庫系統安裝人員很習慣性的「下一步」「下一步」,而建立了許多的「預設型」SQL Server,駭客們就先Scan你的網路是否有開啟1433 port,有的話,接著他會試著使用sa這個使用者來連接,因為不用密碼,然後就BingGo!或是你有設定密碼,駭客們也是可以慢慢猜,讓你防不勝防。所以灌好SQL Server的第一步就是幫sa這個使用者設定一個「非常強壯密碼」來進行保護的第一步。
不管你是使用硬體或軟體的防火牆,基本的方向是一樣的,因為SQL Server不是讓使用者來存取的,而是讓ASP.NET等應用程式來存取,ASP.NET等應用程式的主機是少數,所以我們這台SQL Server應該限制只讓特定主機來存取1433 port,其他一律設定為拒絕(Deny)動作。
步驟一:切換到VMBruce主機
開始 --> 控制台 --> Windows 防火牆 --> 確定「開啟」 --> 選擇「例外」
--> 點選「新增程式」 --> 尋找程式「C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe」
--> 變更領域 --> 自訂清單
在自訂清單內加入開放連接的主機IP Address(簡言之就是這個IP Address是你所信任的),例如輸入:192.168.254.100,限制只有這一個來源IP Address可以與sqlservr.exe連線。
步驟二:
重覆以上步驟,加入程式「C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe」到防火牆的例外清單中。
註:程式路徑可能需要依你安裝的路徑做修改。兩個簡單的步驟就可以將SQL 1433 port攻擊的傷害減到最低,當然針對SQL的攻擊還有很多,例如針對SQL語言的攻擊,是"SQL語言"不是"SQL Server",防1433 port攻擊只是確保資料庫系統的安全之一,但不保障透過其他而來的各種攻擊。例如:SQL injection,SQL隱碼攻擊 Or 跨網站指令碼, Cross-site scripting,通常簡稱為XSS…等等的攻擊。好的系統維護人員,必須時時注意,處處小心,讓系統保持在安全、穩定的狀況下。
總結
雖然標題是談「遠端連線」的方法,但也談了很多基礎的東西,知道的就當成複習,不知道的就當成基礎篇看一看,當你是使用本機連接時,設定簡單,保護也簡單,但當你開放遠端連接時,設定的步驟就麻煩很多,而且還要考慮到網路安全方面,但遠端連接也立刻讓你的ASP.NET等應用程式的應用彈性大大提升。有一利必有一弊,掌握基本原則,不需要的服務絕不開,開了就要做好萬全的保護。
最後再提醒大家,如果你想好好提升SQL Server方面的實力,那「SQL Server 2005 線上叢書」一定好好利用,如果本文中有任何看不清楚、不了解、不明白,先打開這本線上叢書,好好查詢了解,一定會有你要的答案。
最後感謝你看完"LoLo長"(閩南語)的本文,送給各位一份本文完整的PDF:
#2008/8/17:更新「.NET Framework 3.5環境」到Service Pack 1環境。
不知道說原來有Vitual Basic, Vitual Studio,Vitual Studio 2008 Express這些產品
回覆刪除只看過Visual Basic, Visual Studio,Visual Studio 2008 Express :p
打字方面我會在小心點,感謝你的提醒。
回覆刪除其實只要用 .NET Framework 3.5 的安裝程式,他自動會幫你裝好 2.0 ~ 3.5 所有的需求,不需要手動去一個一個裝,
回覆刪除Dear 小聰頭
回覆刪除因為我是從2.0開始學習及使用,所以我學到的"經驗"也就從2-->3-->3.5這樣而來,而PC也是從2升到3升到3.5。
所以寫出來的教學才會是這樣的流程。我還真的沒有直接安裝3.5來使用,如果下次出4.0,我會試著從無到有安裝看看,感謝你提供的訊息。
不好意思 您的文章相當完整
回覆刪除想請教一下
我是用兩台真實IP的電腦(一台XP 一台vista)
SQL server建立在 vista上
使用XP這台始終無法開啟連線
一直會出現錯誤26
不知道您是否有遇過這樣的問題呢?
1.請問兩台的SQL Server版本是否相同,還有管理工具版本。
回覆刪除2.2005的管理工具只能管理2005,2008的管理工具能管2005及2008。
3.兩台的Firewall都關閉了嗎?
請問一下~
回覆刪除我從第一步連接的時候也出現了錯誤26
是因為我的window xp是家用版嗎?
Sql Server Browser有沒有開啟?
回覆刪除Express 如何叫出job& Database mail
回覆刪除請告知謝謝!
Express基本上就是有限制的版本,你所需要的功能未含在Express版本中,詳細的規格你可以參考:
回覆刪除1. http://download.microsoft.com/download/2/D/F/2DF66C0C-FFF2-4F2E-B739-BF4581CEE533/SQLServer2008EnterpriseandStandardFeature%20Compare.pdf
2. http://download.microsoft.com/download/e/8/8/e8859616-e95d-41fe-9f81-ff88388d772b/SQLServer%202008CompareComapctExpress.pdf
感謝您的分享讓我解決SQL 2005 Express相關的問題,在此再跟你說聲謝謝。
回覆刪除請問我用的是#c用的開發工具跟您一樣,但是我把東西上傳到租用的網路伺服器,結果卻出現這個狀況,請問我要如何解決呢,因為我是新手問了很多人都沒辦法給我方向跟解答,我不曉得到底問題出在哪裡該怎麼辦我一點資料庫概念都沒有
回覆刪除http://black-faced-spoonbill.com.tw/spoonbill/index.aspx
1、先學習看錯誤訊息。
回覆刪除2、單就錯誤訊息來看,與資料庫無關。
3、HTTP 404,是找不到路徑。是否確認一下,你的路徑是否有問題?
請問我是權限有問題嗎?因為一直找不到答案試了好久都出現差不多的狀況
回覆刪除http://black-faced-spoonbill.com.tw/birdnews/index.aspx
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
錯誤訊息你都看懂了嗎?
回覆刪除您好~想請問您一點小問題~
回覆刪除以下是我一小段程式
Public Shared Function GetFriendsList(ByVal UserAccount As String) As String()
'建立資料庫連線
Dim Conn As SqlConnection = New SqlConnection("Data Source=127.0.0.1\SQLEXPRESS;User ID=annabel;Password=xxxxx;database=STUDENTDA_2")
Conn.Open()
Dim sqlstr As String = "select * from student where UserAccount='" & UserAccount & "'"
Dim cmd As SqlCommand = New SqlCommand(sqlstr, Conn)
Dim DR As SqlDataReader = cmd.ExecuteReader()
'如果不為空值
If DR.HasRows Then
Dim friends As Generic.List(Of String) = New Generic.List(Of String)()
'如果有值就用While執行DR.Read(), 此Read()會傳回boolean值並往前下一個資料行
While (DR.Read())
Dim studentname As String = DR("studentName")
friends.Add(studentname)
End While
'回傳 String() , 當然您也可以直接回傳Generic.List(Of String), 也很方便操作
Return friends.ToArray()
Else
Return Nothing '如果沒有取得值就回傳Nothing
End If
DR.Close()
Conn.Close()
執行後一直卡在Conn.Open()就會出現例外狀況"無法開啟登入所要求的資料庫 "STUDENTDA_2"。登入失敗。 使用者 'annabel' 的登入失敗"
想請問您我該怎麼解決呢?(平常也是用這組帳密就可以登入資料庫了!)是我的連線字串有問題?還是哪邊設定有問題呢?謝謝您~
哈囉~我已經成功了!
回覆刪除分享一下,問題點在那裡?你又是怎麼解決的?
回覆刪除作者已經移除這則留言。
回覆刪除這很難判斷,
回覆刪除如果SQL Server能遠端連線,那在確認一下「防火牆」的設定。
Client端的SMSS軟體版本都一樣嗎?
我想請問一下版主,在下有幸能拜讀你的文章,是關於連接遠端的資料庫,但經過一連串的設定後,連不到我想要的資料庫,但可以連到其他資料庫,請問這是甚麼原因??我想要的資料庫是ERP的資料庫。
回覆刪除ERP是一個資訊管理系統,本身是用我想要聯的那個資料庫,我今天想要用別台電腦去連那資料庫,但是沒有出現那個資料庫。謝謝你
就你的描述,
回覆刪除You --> ERP Database, bad connection.
You --> Other Database, good connection.
很明顯,ERP Database 設定有問題。
如果是 MS SQL,請參考這 http://kkbruce.blogspot.com/2009/08/microsoft-sql-server-2008-express.html 篇。
不然你就要能提供更進階的「錯誤訊息」,不然我也只能亂猜。