前言
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 服務」中「重新啟動」兩項服務。


遠端連線二:使用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」

--> 變更領域 --> 自訂清單

步驟二:
重覆以上步驟,加入程式「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: