一、序:種子


  2008年9月,微軟發表了SQL Server 2008,SQL Server 2008剛發表時不管是相關工具、說明文件都還很不充足,例如,如果你在一開始就安裝SQL Server 2008 Express,安裝後你會發現:「英雄無用武之地」。因為SQL Server 2005的管理工具根本無法連線到SQL Server 2008,管你是Windows驗證模式還是混合驗證模式。等到SQL Server 2008把管理工具從套件分離出來,又是一段時間之後的事。

  而到現在為止不過10月的時間,不論是工具、說明文件等,都已經相當完整,而且SQL Server 2008 Service Pack 1都已經出來了,這一次我想做一個細部的介紹,而不是下一步、下一步的介紹。

 

當種子掉到泥土裡


  台灣首富郭台銘說:「阿里山上的神木之所以大,四千年前當種子掉到泥土裡時就決定了」。

  我可以這種說:「資訊系統的種子在安裝時就決了日後的大小。」例如作業系統的磁碟分割。好的系統磁碟分割規劃,能讓你的系統在相同的硬體規格之下,不論在效能或穩定硬是比不好的磁碟分割要來的好。

  我模擬一個常有的情況,如果你只有一台伺服器,又要架網站、又要架FTP、又要架資料庫。

規劃一、
    C:\ 作業系統
    D:\ wwwroot、ftproot、dbroot

規劃二、
    C:\System
    D:\Temp
    E:\wwwroot
    F:\ftproot
    G:\dbroot
    H:\Logs

  系統磁碟分割(Partition)規劃,我可以依幾個大方向來談,一、如果預算充裕,最好是一台伺服器執行單一工作,這樣的整體系統在規劃時也比較簡單;差一點,或許可以使用現在很火紅的虛擬化技術,買幾台強大伺服器,然後導入虛擬化作業,這部份的磁碟分割規劃也簡單,反正這些虛擬化後的Server都可以用「檔案」的觀念來看,搬來搬去很方便,事後的新增硬碟也很簡易方便。

  那在預算有限,又需要在單一伺服器提供許多服務,又沒經費導虛擬化,那一開始的規劃就很重要。伺服器的硬體要好一點,RAID更是基本,而進系統前的Partition Plan就是重點。

  以上述範例,可以簡單看出,我將系統整個區分為:作業系統及程式區、伺服器服務區、暫存區、日誌區。

作業系統及程式區


  即一般Windows系統裡的「C:\」,這裡面只有作業系統及必要程式,我所謂必要程式例如「FTP Server」、「Database Server」…之類的程式。

伺服器服務區


  這台伺服器需要提供什麼服務,而且最好每個服務獨立一個Partition。一開始你就要事先預估一下每個服務內容所會佔用的空間容量大小來安排比例。我們假設上述是專門給User下載資料的FTP檔案伺服器,User透過Web網頁找到他們想要的資料,然後透過資料庫來管理下載的Link及做一些統計的動作。這樣分析下來,你會發現,wwwroot及dbroot都不用太大,而ftproot必須大一點,容量空間比例上我會這樣設計「wwwroot 20%、dbroot 20%、ftproot 60%」。

 

暫存區


  這是我多年的習慣,不管在個人電腦(PC)、筆記型電腦(NB)、伺服器(Server)都一樣,都會有一個獨立的暫存區。一般人不知道,我們作業系統從安裝完畢之後,接下來你不管是執行程式、新增/刪除程式、上網…都會產生一堆的暫存檔案,這些檔案大小不一且雜亂無章。很常聽到一句話:「奇怪,為什麼電腦用久了,就會越來越慢?」其實可以說是這堆暫存檔案是造成的原因之一,它們會使磁碟資料結構鬆散,增加磁碟搜尋資料、讀取資料的時間,造成系統效能的降低,而且預設還全部放在重要的「系統磁碟區C:\」之下。所以我非常建議各位,最好建一個暫存資料磁碟區,把系統預設的Temp目錄修改到這個Temp Disk,讓系統重要的C:\保持單純。

日誌區


  這部份有點像暫存區,但不同的是暫存區的資料沒有重要性,而日誌區的資料是有重點性。像我們伺服器所提供的每一項服務幾乎都有「日誌Log」的功能,Log這個東西也是多又雜,也是大小不一,也容易造成磁碟資料結構鬆散。全部暫存資料的缺點它都有,但有一點不同,它的資料是非常有價值的,尤其是在系統出問題時(或出問題前)。所以我也是建議建一個專門放各種日誌檔案的分割區,這樣也方便統一管理。

  我很少很少看到有人或有書在資料庫跟你談Partition,或許這不是資料庫管理人員的事,我們安裝時只是沒大腦的下一步下一步的按,其他什麼都不管,反正資料庫能Run,管他的!

  我們在安裝SQL Server 2008時,其實是有許多小細節的,如果你能注意到這些小細節且做微微調整,不但整個資料庫的效率馬上提升,而且更安全。例如在後面會介紹「伺服器組態」裡「定序」,很少人會去修改,也沒有去了解組態值的意義,但當你去做了解,而且做一些些小修改後,就能馬上提升資料庫效率,而且更重要的是,很多設定必須在安裝時就決定,而且決定了就不能更改,這就是種子。


二、安裝準備--作業系統環境


  以入門而言,Microsoft SQL Server 2008 Express(以下除非特別註明,不然2008 Express指的就是SQL Server 2008 Express版本)是個非常棒的學習平台,而且全面使用.Net Framework技術。

  在開始安裝2008 Express之前,我們必須先針對「作業系統」進行一些工作之後才能開始安裝。簡單的說,因為從SQL Server 2008版本開始(版本代號10.0)完全使用.NET Framework技術所開發而成的,所以你的作業系統必須先有.NET Framework執行環境才行。也因如此,所以之前2005 Express版本的SSMSE管理工具無法管理2008 Express版本。但如果你安裝完2008 Express版本及2008 Express SSMSE管理工具,是可以向下相容管理2005 Express。

關於EXPRESS的版本

 

SQL Server Express (x86 和 x64)


  單純只有SQL Server Express資料庫系統。與with Tools, with Advanced Services兩版本最大差異就是沒有SQL Server Management Studio 2008 Express(SSMSE)管理工具。也就是說,如果你的這台資料庫伺服器只需要讓遠端Client連接進來進行相關作業,根本不會有本機使用SSMSE管理工具的機會,那就很適合這個版本,小又單純。

SQL Server Express with Tools (x86 和 x64)


  這是2008 Express + SSMSE管理工具的版本。也就是你有需要在資料庫伺服器本機做一些組態設定…等相關操作,那你就安裝這個版本。

SQL Server Express with Advanced Services (x86 和 x64)


  除了SQL Server Express與SSMSE管理工具外,還提供「全文索引」及「報表伺服器」兩大功能。

  註:詳細SQL Server 2008版本功能差異::點擊這裡

  在2008 Express一推出時,只有with Tools及with Advanced Services 兩種選擇,沒有獨立的2008 Express及SSMSE工具可以下載。而我有些伺服器只需要安裝2008 Express,而Client只需要安裝SSMSE管理工具,相當不方便,不需要SSMSE的也要裝,不需要2008 Express也要裝。不過現在都相關工具都已經相當完整了,先考慮清楚你所要使用的版本,因為安裝的功能越多,消耗的系統資源就越多。後續我們會以「SQL Server Express with Advanced Services (x86 和 x64)」這個版本來做安裝前環境準備動作及安裝示範。

2008 EXPRESS的限制


  在開始進入安裝之前,我們要先了解2008 Express的一些限制。在2008 Express中除了進階軟體功能的限制外(例如:壓縮),另外更重要的就是硬體上的限制,在功能差異方面,請參考上一節的註解「SQL Server 2008版本功能差異」。而2008 Express硬體的限制延續2005 Express一樣的限制:

  • CPU數目:1
  • 記憶體上限:1 GB
  • 64位元支援:Windows on Windows (WOW)
  • 資料庫大小:4 GB


  CPU數目是說實際主機版上的實體數目,也就是2008 Express最多能使用一顆實體CPU來作業,但以現在隨便一顆實體CPU都是二核心、三核心、四核心…,這方面你到是不用擔心,而且如果這種多核心等級CPU還不夠你操的話,那你不太應該往下看了,太浪費你的時間了。記憶體上限的意思是說2008 Express最大只能使用1 GB的記憶體。老實說,我感覺Microsoft在這方面有點小氣了,我個人感覺2 GB是2008 Express比較實用的數字。其中比較要注意的是「資料庫大小」這一個項目,Express版本的4 GB限制是指「單一個DataBase檔案(*.mdf)」,例如我們常當成範例的Northwind.mdf(北風資料庫),最大只能成長到4 GB,在Express版本中的每個資料庫檔案大小都會有4 GB的限制,但是還是有破解的方法。

  Crack,破解嗎?沒有啦,是避開的方法,這是所有硬體限制裡可以「避」的部分,避的方法是:「多開幾個資料庫檔案(*.mdf)來避開這項限制」。如果你注意看,我寫的限制是「單一mdf檔案的大小」有限制,所以如果你預計你的資料庫大小會超過4 GB時,除了購買正式版外,在2008 Express上你可以多開幾個資料庫檔案避開這部分的限制,例如:products.mdf、members.mdf,但唯一麻煩可能是程式就要設計成「跨資料庫存取」的方式。

確認作業系統及硬體



支援的作業系統

  • Windows Server 2003 Service Pack 2
  • Windows Server 2008
  • Windows Vista
  • Windows XP Service Pack 2

 

32位元系統,硬體

 

  • CPU:備有 Intel 或相容 1GHz (或更快) 處理器 (建議使用 2 GHz 或更快,只支援單一處理器) 的電腦。
  • RAM:最少 512 MB RAM (建議 1 GB 或以上)。
  • Disk:1.9GB 可用硬碟空間。

 

64 位元系統,硬體

 

  • CPU:1.4 GHz 或更高等級處理器 (建議使用 2 GHz 或更快,只支援單一處理器)。
  • RAM:最少 512 MB RAM (建議 1 GB 或以上)。
  • Disk:1.9 GB 的可用硬碟空間。

 

環境準備



方法一:傳統安裝法

  什麼是傳統安裝法,簡單說,就是拿著DVD安裝,不然就是上Windows Download把所有必須的程式及套件下載回來安裝。

  前面說過,在開始安裝SQL Server Express之前,必須先準備好作業系統.NET Framework環境,所以我們必須先行下載以下套件(最好依順序安裝):

  • Microsoft .Net Framework 3.5 SP1:下載點(啟動載入器)、下載點(完整套件)
  • Windows Installer 4.5:下載點 (需重開機)
  • Windows PowerShell 1.0:
    x86 版 Windows XP Service Pack 2 的 Windows PowerShell 1.0:下載點
    x64 版 Windows XP Service Pack 2 的 Windows PowerShell 1.0:下載點
    x86 版 Windows Server 2003 Service Pack 1 的 Windows PowerShell 1.0:下載點
    x64 版 Windows Server 2003 的 Windows PowerShell 1.0:下載點
    Itanium 版 Windows Server 2003 Service Pack 1 的 Windows PowerShell 1.0:下載點
    x86 版 Windows Vista 的 Windows PowerShell 1.0:下載點
    x64 版 Windows Vista 的 Windows PowerShell 1.0:下載點


  要比較注意的只有PowerShell一項,請選擇正確的版本對應的PowerShell,進入下載面畫後,你可以依需求切換PowerShell的語系版本,也就是說,假設我不要使用繁體版本,我習慣看英文,那就可以選擇安裝英文版本的PowerShell,安裝之後,以後只要有關PowerShell的任何訊息都會以英文來顯示。重點是,對應的作業系統版本要對,語系看你喜好。

  另外只有一種情況下可以不安裝PowerShell,只有單純安裝「SQL Server Express」這個版本時,可以不下載及安裝PowerShell,其他兩個2008 Express版本(with Tools及with Advanced Services),或單獨安裝SSMSE管理工具,都需要安裝以上三個套件。

SQL Server 2008安裝失敗的原因


  如果你乖乖的安裝好以上三個套件,然後開始安裝,如果有機會,你會發現一件很好玩的事,SQL Server 2008不管你怎麼安裝,SQL Server 2008就會是安裝失敗,怎麼樣都裝不起來。

  哈,發生了什麼事,我已經安裝過不下N次2005/2008 Express,SQL Server 2005/2008,都沒有發生過這種情況,而且我在一台剛灌好完全乾淨Windows Server 2003伺服器上安裝,怎麼試都找不出問題點,又在一台Vista上測試,還是一模一樣。我先排除硬體的問題,最後問題出現在Microsoft .Net Framework 3.5 SP1這個「最新」的套件上,Microsoft .Net Framework 3.5 SP1裡會幫我們安裝一個最新版本MSXML 6 SP2的套件,這個MSXML 6 SP2版本會造成SQL Server 2008安裝失敗,真是害死人的MSXML 6 SP2,這個問題讓我花了整整一周時間。所以在進行安裝之前,還才必再做一件事:

  安裝SQL Server 2008 (含Express)完成之後,再上MSXML 6 SP2版本就不會有問題。

  • MSXML 6 SP2:使用Windows Update升級即可。


  註:以上問題,除了SQL Server Express with Service Pack 1這個版本不會出現安裝失敗問題,是可以正常安裝。另外,你如果是在XP環境下,預設是不會安裝MSXML 6 SP2,所以不會有安裝失敗的問題。

2008 EXPRESS下載



  廢話一堆,進入主題吧。
  完成安裝環境的準備後,選擇你所需要的版本下來回來,然後就可以正式進入安裝SQL Server 2008 Express。

SQL Server 2008 Express

 

  • SQL Server Express Service Pack 1:下載點
    Microsoft SQL Server 2008 Management Studio Express:下載點
  • SQL Server Express with Tools:下載點
  • SQL Server Express with Advanced Services:下載點
  • SQL Server Expres Service Pack 1:下載點
  • Microsoft SQL Server 2008 線上叢書 (2009 年 5 月):下載點
  • 範例和範例資料庫 (英文):下載點


  先選一個符合你需求的2008 Express版本來安裝。如果你選擇SQL Server Express這個版本,建議直接選with Service Pack 1的版本套件,可以各自獨立在個別電腦設備安裝,或是原本資料庫伺服器沒有使用SSMSE的需求,後來有了,那就可以後來再加安裝上去即可(要先裝PowerShell)。如果2008 Experss及SSMSE都安裝了,那就是2008 Express + SSMSE = SQL Server Express with Tools 這個版本套件。

  2009年4月7日SQL Server Express推出Service Pack 1,所以你安裝with Tools及with Advanced Services版本,切記,安裝之後一定要快上Service Pack 1。除了Service Pack很重要之外,在學習SQL Server最重要的就是這本「Microsoft SQL Server 2008 線上叢書」,這是你玩SQL Server最重要的一本參考書,它方便你在本機閱讀及查詢。這是一本可以對抗外面書局所有關於SQL Server的書(也包含本文),包山包海,要什麼有什麼,只差你用多少心思去了解它。

  在「範例和範例資料庫」裡你可以下載到一大堆的範例和範例資料庫,這些資料庫可以讓你拿來習慣用,不用怕把資料庫毀了,努力玩、用力玩、盡量玩,玩的越多,得到的就越多。

方法二:全自動安裝法


  這個方法二可強大了,這可以說是Microsoft IIS方面一個大進步。如果你認真的看最近的微軟發表產品,你會發現功能已經到了強大的境界,但強大的東西就有一定複雜性。安裝一個SQL Server,以前只要下一步加下一步就可以完成的東西,現在必須先安裝A再安裝B還有C,而且安裝時還要注意東注意西。所以微軟也注意到了我們的需求,所以Microsoft推出了一個稱「Microsoft Web Platform Installer(WPI)」的軟體,這個軟體可好用了,它可以「全自動」幫你安裝Microsoft Web Platform(微軟網站平台,說的很白了)所需要的任何東西。只要這個WPI所支援的產品,都可以透過它來自動安裝及使用。

Microsoft Web Platform Installer:下載點 (目前最新2.0 RC版本)

  下載回來會是一支wpilauncher.exe程式,執行安裝:

Microsoft Web Platform Installer安裝初始畫面
  它會依你的作業系統平台顯示你可以安裝的項目。

  第一部分顯示「What’s New?」
  也就是現在有什麼新的產品、軟體可以在Microsoft的網站平台安裝執行。你可以很清楚看到ASP.NET MVC 1.0、SQL Server Express 2008 with Service Pack 1、SQL Server 2008 Management Studio Express,「PHP 5.2.10」,你沒有看錯,現在Microsoft與開放原始碼的關係越來越好,連PHP都直接支援。

Microsoft Web Platform Installer中What's New?
  第二部分顯示「Web Platform」,也是就網站平台部分。

Microsoft Web Platform Installer中網站平台

  這部分的重點在後面的「Customize」,例如我們點擊Web Server後面「Customize」,出現下例自訂選項,

Microsoft Web Platform Installer網站平台的自訂選項
  因為我是在Windows XP上執行,所以出現了IIS 5的選項,在不同平台會出現不同選項,你可以看到除了IIS之外,我還可以安裝其他相關套件,例如安全性的URL Scan 3.1。所以每一項Customize都要好好進去看看。

 第三部分是「Web Applications」,網頁應用程式。也就是Microsoft幫你把目前網路上與.NET Framework配合的很好的應用程式幫你找好也列表出來,這裡面全是當紅的應用程式。你只要選擇你想安裝的應用程式即可,WPI就會自己幫你安裝起來。

Microsoft Web Platform Installer的網站應用程式

  WPI在安裝之後,會在你開始程式集裡留下一支WebPlatformInstaller.exe程式,你可以隨時執行,WPI會去同步網路上的資訊,看是否有出新的軟體或套件,讓你節省很多不必要的時間。

  看完後,有沒有很心動

三、安裝SQL Server 2008 Express


  這裡我們使用傳法安裝法來安裝SQL Server Express with Advanced Services來練習安裝。

1、安裝前檢查



  當你開始安裝之前,先啟動「System Configuration Checker」工具,檢查一下,此工具就是在檢查我們前面環境準備的東西。

2、檢查結果
  基本上只要沒有「失敗」項目即可。


  請注意,這裡檢查不出來「MSXML 6 SP2」的問題。

3、選擇「安裝」,然後選擇「新的SQL Server獨立安裝」


4、安裝程式會再一次進行檢查


5、輸入產品金鑰
  由於我們是安裝2008 Express版本,所以不用輸入,按「下一步」就好了。


6、勾選「我接受授權條款」,按下一步;
  註:為什麼繁體版的SQL Server會出現簡體的授權條款?


7、按下「安裝」讓程式開始進入正式安裝過程;


8、安裝程式再一次檢查:


9、選擇你所需要的功能;


  這裡我們雖然選擇SQL Server Express with Advanced Services版本來安裝,但這裡的「特徵選取」有點像「自訂」的味道,舉例說,如果我只選「Database Engine Services」與「管理工具 – 基本」,那其實就是安裝「SQL Server Express with Tools」是一樣的意思。

  執行個體功能,最少要選「Database Engine Services」。共用功能裡的「管理工具 – 基本」就是我們說那SSMSE管理工具。以上兩個是建議必定要安裝的,練習用就「全選」,其他看你的需求了。

  這邊還有一個重點,就是「共用功能目錄」。等一下在安裝過程裡,你可以看到在安裝2008 Express過程中,是可以把核心系統與其他功能系統分開安裝到不同目錄,例如把「執行個體」與「共用功能」分開安裝在不同的Partition,所以如果一開始你就有單獨規劃屬於資料庫的Partition,那麼建議是可以把這裡的目錄指向專屬的Partition去。

10、執行個體組態


  這裡先讓我們了解一下什麼是執行個體?執行個體是一個讓我們在同一台伺服器裡可以同時安裝、操控數個資料庫的技術。這裡指的資料庫可不是資料庫檔案(*.mdf),是資料庫(Database),這樣說好了,像我的電腦裡,有SQL Server 2005,後來又安裝了SQL Server 2008,那電腦裡的應用程式,怎麼知道要跟那個資料庫做連接、做資料處理?

  重點就在「執行個體」,簡單說,你就把執行個體看成每一個「資料庫的名稱」,例如,我這次安裝的資料庫名稱叫「SQLEXPRESS」,然後,我在同一台電腦再安裝一次SQL Server 2008,然後我給他執行個體的名稱為「SQLBruce」。然後只需在使用時(SSMSE、網頁、應用程式都一樣)指定你所要「連接」的資料庫執行個體名稱,這些程式就知道要跟那一個資料庫來進行連接及處理的動作。

  預設執行個體:此執行個體是藉由執行它的電腦網路名稱來識別。一部電腦中只能有一個是預設執行個體。它能讓較早SQL Server版本來使用SSMSE來連線到預設執行個體。

  具名執行個體:此執行個體是以電腦的網路名稱加上執行個體名稱來識別,格式為{Computer Name}\{Instance Name},例如:

  DS\SQLExpress
  DS\SQLBruce
  以上是標準使用{Computer Name}\{Instance Name}的格式。

  192.168.1.10\SQLExpress
  192.168.1.10\SQLBruce
  你也可以使用IP來代替{Computer Name}部分。

  DS.yourdomain.com\SQLExpress
  DS.yourdomain.com\SQLBruce
  你也可以使用Domain來代替{Computer Name}部分。IP與Domain在遠端連線時會使用到。

  .\SQLExpress
  .\SQLBruce

  這個重要,這個「‧」(點)代表「本機」的意思。如果你是在本機作業,那就可以使用這個簡寫「‧」來代替{Computer Name},例如,你的資料庫與網站是在同一台伺服器,那麼網站內與資料庫連接相關程式碼,就可以使用這個「‧」來簡化程式碼

  另外注意,SQL Server的系統名稱(sysnames)與保留名稱不可作為執行個體名稱,例如「default」就不行,因為它是安裝程式所使用的保留名稱。

  如果是練習用,我建議用原設定值就好,如果是要用在正式的環境,我建議修改預設執行個體名稱,畢竟會玩MS SQL Server的人或黑客也都知道這種預設名稱,如果他要Try,當然會先找懶惰的人下手。多點一保護總是好的。

  執行個體根目錄,共用功能目錄同樣的理由,如果你一開始有規劃資料庫Partition,也是建議安裝目錄指向專屬的Partition去。

11、磁碟空間需求


  綜合以上組態並檢查磁碟空間,這裡你就可以看到除了必要的資料庫系統檔案,我安裝到C:\外,其他共用安裝目錄、執行個體目錄,我全部規劃一個獨立的Partition。

12、伺服器組態


  重點來了,如果你安裝過SQL Server 2000或SQL Server 2005,這裡是跟SQL Server 2000/2005在安裝過程裡比較大差異的地方。

服務帳戶



  在服務帳戶你可以為每個「服務」設定不同的「帳戶」來啟用這個服務。我們知道在Windows系統裡,每個服務都是需用有一個帳戶來啟用,以往的設定都會使用系統預設的帳戶來啟用,但這樣往往造成一個問題,也就是這些預設的帳戶往往是不安全的。而一般我們也會建議使用低權限的帳戶來當成這些服務的啟用帳戶。

  我這裡建議是可以依使用服務的不同,自行建立個別的服務啟用帳號。我在系統裡就另外建了三個一般帳戶「SQLDE」「SQLRS」「SQLFFDL」,密碼一定要用高度複雜性的密碼。

  • SQLDE:SQL Server Database Engine
  • SQLRS:SQL Server Reporting Services
  • SQLFFDL:SQL Full-text Filter Daemon Launcher
  (最好也不用一模一樣,再加點自己的變化)



  我這樣設定,除了簡單就可以看得出來這個帳戶是做什麼用途,也可以減少系統不必要的安全性問題,因為我建立的都是最一般性的帳戶,再加上高度複雜性的密碼,就算黑客拿了也沒什麼用。

  在Windows系統建立帳號之後,回到我們安裝畫面中,依順輸入帳戶名稱及密碼,如果錯了,安裝程式會提醒你,而且也沒有辦法再按下一步。

  在服務帳戶裡還有一個預設停用的「SQL Server Browser」服務。如果你有需要使用遠端連線到SQL Server的話,建議把這個SQL Server Browser改為「自動」啟用。簡單說,這個服務也就是讓Server的資料庫也能讓遠端連線進來進行作業。

  例如我常需要在我的NB或PC上連到遠端SQL Server伺服器,但如果SQL Server這台伺服器沒有開SQL Server Browser的話,那你怎麼連也連不進來,就算設定了port 1433也沒用。

  在這裡還是要再提醒一次,多開一個服務就多一個風險,網路是很不安全的地方,每一次服務的最基本原則就是,有需要才開,沒需要的能關就關。

定序




  伺服器組態的第二個重點,就是定序,其實一般人很少會去動「定序」這裡的設定,如果是我,我也是這樣建議,因為動了就永遠改不回來(其實能改,只是…Big Trouble),但這裡其實是微調整個SQL Server的大地方,有必要加強介紹一下。


  按下「自訂」後,自訂定序的畫面。

WINDOWS定序指示項和排序次序



  你可以從下拉式選單中選出Windows定序名稱,使用不同的定序名稱就會採用相對應的字碼頁(Code Page)。如果有資料庫間複製的需求,所有參與複製的SQL Server資料庫都必須選擇相同的字碼集,因為改變定序必須要重建你的資料庫,這在一個已上線的系統裡是一個非常嚴重的問題,除非你有把握及實力,不然建議使用預設「Chinese_Taiwan_Stroke」選項。

  再定序名稱下方,我們還可以進階選擇要使用的「排序原則」。排序原則會影響到SQL Server儲存資料時的組織方式。

  二進位:使用二進位排序會與其他的排序原則互斥,也就是選擇二進位方式,其他排序原則就無法選擇。二進位是根據字元定義的位元模式排序來比較SQL Server資料表中的資料。二進位會區分大小寫,亦小寫比大寫優先,且區分腔調字,這是最快的排序方式。

  二進位 – 字碼指標:依Unicode資料的Unicode字碼指標排序來比較SQL Server資料表中的資料。對於非Unicode資料則使用二進位排序。

  區分大小寫:預設是沒有區分大小寫。這可以讓前端程式開發人員或後端SQL撰寫時比較容易,且使用者在查詢資料時也不用注意大小寫問題。例如:「select * from orders」正「Select * From Orders」將視為相同的SQL敘述句。這裡還是再提醒一下「安全」的問題,你的方便,也是大家的方便,大家的方便,也是網路上每個人的方便,網路上有好人與壞人,讓壞人方便,也是你要防範的地方。

  使用「區分大小寫」還要注意一個問題,就是資料庫表格中就不能使用大小寫相同的鍵值來當主鍵,這請特別小心。如果想區分大小寫,建議選二進位排序原則,因為這個選項可以得到較好的效率。

  區分腔調字:指定SQL Server區分有口音與沒有口音的字母,例如「a」不等於「á」。

  區分假名:指定SQL Server區分日文的片假名與平假名。如果沒有勾選,SQL Server會將片假名(Katakana)與平假名(Hiragana)視為相同。

  區分全半形:指定SQL Server區分以「單一位元組字元(半形)」和「雙位元組字元(全形)」來表示的同一字元。

SQL定序,用於回溯相容性
  這是為了與較早期的SQL Server 6.5版、SQL Server 7.0版的相容設定。

13、資料庫引擎組態


帳戶提供


  這裡要設定一開始的驗證模式,也就是一開始要使用的登入方式。

  • Windows驗證模式
    Windows驗證接受使用者在登入Windows時獲得驗證,然後再傳送安全性憑證給SSE。而使用者的帳號和密碼只保留在Windows中。當ASP.NET使用Windows驗證時,連接字串不會提供帳號及密碼,只提供使用Windows驗證的指示。適合本機連接使用。
  • SQL驗證模式
    SQL驗證使用儲存在SQL Server中的資料來做使用者驗證。在連接時需提供「使用者名稱」及「密碼」來進行驗證。適合遠端連線使用。
  • 混合模式
    可以自行選擇使用Windows驗證或SQL驗證。

  在安裝過程中,我們建議選擇「Windows驗證模式」,安裝完成後如果有遠端連線的需求,再修改組態為「混合模式」。這樣建議是有原因的,因為如果你在安裝過程裡選擇使用「混合模式」那就必須啟用「內建SQL Server系統管理員帳戶」,我們稱SA帳戶。這在SQL Server早期的版本裡是個大漏洞,原因是早期SQL Server中,系統預設安裝後就有一個權限無限大帳戶sa,而且這個帳戶預設還不用密碼,所以呢,那個時期就出現一堆Scan SQL Server工具,Scan你的網路、你的網站是否有使用SQL Server,然後再試著看你是不是一個「人性來自於惰性」的人,輕輕鬆鬆一個無密碼sa帳戶加port 1433就可以進入無人之地。當然現在這種攻擊少了許多,但是大家還是都知道MS SQL Server裡有個sa帳戶,所以建議還是不要啟用。等安裝完畢,我們進SQL Server再建我們自己的需要的帳戶。

  下方必須指定SQL Server管理員的帳戶,也就是本機在使用Windows驗證模式登入時的帳戶,你可以選擇「加入目前使用者」或自行「加入」使用者。我們點擊「加入目前使用者」即可。

資料目錄




  這裡是讓我可以選擇各自資料庫存放的目錄,如果你想要有比較好的效能、比較好的資料保護,這裡建議是分開存放,這也是我一開始跟大家談Partition的關係,SQL Server文件是建議把「資料庫目錄」和「記錄檔目錄」分開存放,所以如果你已經切割出來G:\dbroot、H:\Logs,那你就可以修改這裡的設定,把「使用者資料庫目錄」和「暫存資料庫目錄」存放到G:\,然後把「使用者資料庫記錄檔目錄」和「暫存的資料庫記錄檔目錄」存放到H:\。最後,2008 Express是沒有提供自動備份的功能,但是可以手動備份,這個手動備份建議不要存放在與SQL Server同一顆硬碟,才能達到較好的備份效果。所以最後「備份目錄」對我們的影響不大。這邊所有的目錄路徑只是個預設路徑,未來例如我們在新增資料庫時還是可以自行指定相關路徑。

FILESTREAM




  這裡我引述TechNet文件的解譯:「FILESTREAM 功能提供一個方式來儲存及存取大型二進位值,其方式是透過 SQL Server 或直接存取 Windows 檔案系統。大型二進位值是大於 2 GB 的值。在每天建立的資料中,有許多都是未結構化的資料,例如文字文件、影像和視訊。這些未結構化的資料通常是儲存在資料庫外面 (與結構化資料分開)。這樣的分隔可能會造成資料管理更為複雜。或者,如果資料與結構化的儲存體有關聯,則檔案資料流處理的功能和效能可能會受到限制。

  FILESTREAM 會將 SQL Server Database Engine 與 NTFS 檔案系統整合,其方式是將 varbinary(max) 二進位大型物件 (BLOB) 資料當做檔案儲存在檔案系統上。Transact-SQL 陳述式可以插入、更新、查詢、搜尋及備份 FILESTREAM 資料。Win32 檔案系統介面提供了資料的資料流方式存取。

  FILESTREAM 會使用 NT 系統快取來儲存檔案資料。如此可減少 FILESTREAM 資料可能對 Database Engine 效能產生的任何影響。並不會使用 SQL Server 緩衝集區;因此,此記憶體可用於查詢處理。」

  簡單的說,也就是說你可以把「影、音…」等多媒體資料也存入資料庫中,透過FILESTREAM功能。如果不會使用到,可以先不啟用,需要時可以使用修改組態的方式來啟用FILESTREAM功能。我們先選擇不啟用。

14、Reporting Services


  如果你是安裝2008 Express及2008 Express with Tools是沒有這個畫面,這裡是設定報表伺服器的使用方式。如果你沒有使用到報表伺服器或暫時不會使用到,可以先選第三項。記得,每啟用一個服務就多吃一點效能。我們先選擇第一項「安裝原生模式預設組態」。

15、錯誤和使用方式報告


  這看你自己吧,是否要讓Microsoft收集你的硬體資訊及使用方式。

16、安裝規則


  安裝前的最後一次檢查。

17、準備安裝


  最後確認一下要安裝的2008 Express的功能及項目。


  最後需要一點時間來安裝,安裝完成之後,記的要上SQL Server 2008 Service Pack 1,還有MSXML 6 SP2這個會影響SQL Server 2008安裝的元件。

  到這裡,我們已經完成了整個2008 Express的安裝,但事情結束了嗎?還沒,因為安裝好之後,2008 Express還有許多設定值需要我們去微調一下。例如,要讓2008 Express提供連端連線等功能。

  還有,使用連端連線功能,一定要使用那個不安全port 1433嗎?我想在ASP.NET裡寫存取遠端2008 Express程式,怎麼寫?

四、SSMSE及SQL Server Configuration Manager



  這個部份我們從SSMSE來與2008 Express連線,連線後進行一些組態的調整,讓2008 Express可以開啟混合模式,開放遠端連線,讓管理者可以由遠端與2008 Express連線進行工作。要開放SQL Server達端連線,除了SSMSE外,還需要在SQL Server組態管理員進行一些設定。

SSMSE組態


1、開啟SSMSE管理工具




  「伺服器名稱」:也就是執行個體名稱,記得格式為{Computer Name}\{Instance Name}。還記得那個「‧」嗎?不記得的話,請再回去複習一次。

  「驗證」:如果是在SQL Server本機,我們使用Windows驗證來連接登入即可,如果需要遠端連接才需要使用「SQL Server驗證」。除非是練習機,不然不太可能讓你每天在機房的伺服器旁做本機登入,所以絕大多數而言都會開SQL Server 驗證,換個例子講,當我們使用VWD或Visual Studio寫.NET資料庫相關程式時,就必須使用SQL Server驗證來跟SQL Server做驗證連接,然後在本機Visual Studio開發相關程式,開發好了之後,上傳到伺服器上,基本上資料庫相關程式是連改都不用改,因為你在開發階段就已經將「遠端連線」的相關程式碼寫好了,所以不管你將這支網頁程式放到那裡,基本上它都找得到SQL Server,然後連線,存取資料。

  因為安裝時設定為Windows驗證,所以我們先在本機使用Windows驗證來連接2008 Express。

2、物件總管




  透過Windows驗證連接成功後,你在管理工具左邊可以看到工具項「物件總管」,在物件總管你可以選擇你所要進行的相關操作。另外,透過物件總管,我們也可以同時間操控多台2008 Express,例如下圖,我使用遠端連接到另一台遠端的2008 Express。


.\SQLEXPRESS組態




  我們在最上面.\SQLExpress點滑鼠右鍵,然後選「屬性」,


  切換到處理器頁面,我們能看到我實體是一顆四核心Q9400的CPU,還記得我們的硬體限制嗎?限制的是實體CPU不是多核心的核心數目。


   切換到安全性頁面,這是我們要變更組態的第一個地方,將Windows驗證修改為「混合模式」,也就是「SQL Server及Windows驗證模式」,按確定之後就可以使用SQL Server驗證來遠端連線了嗎?還沒。

  開啟SQL Server驗證模式後,第二步我們還需要設定能使用SQL Server驗證登入的「帳戶」,因為一開始我們就設定Windows驗證模式,所以SQL Server預設的sa是沒有啟用,也不建議啟用

新增登入帳號



  安全性 → 登入 → Mouse左鍵 → 新增登入



  登入屬性



一般



  登入名稱:輸入使用者名稱。如果你要使用Windows驗證,可點擊「搜尋」來搜尋本機Windows帳號。

  驗證模式:選擇此使用者是要使用Windows驗證或是SQL Server驗證來登入。我們選擇SQL Server驗證,底下的密碼相關資訊才會有作用,需要注意是的底下來三個密碼原則:
  1. 強制執行密碼原則:必須使用「強密碼」或「複雜密碼」。增強式密碼長度必須至少七個字元,並包含以下三組的字元:「字母」、「數字」和「符號」。
  2. 強制執行密碼逾期
  3. 使用者必須在下次登入時變更密碼(需勾選「強制執行密碼逾期」才會有作用)
  建議最少使用「強制執行密碼原則」,來減低被攻擊成功的機率。


  預設資料庫:可設定此使用者登入後預設使用的資料庫。我們順便簡介一下SQL Server系統資料庫:

  • master:
    主要資料庫,系統表格、環境資訊、伺服器重要資訊都存放在master資料庫內。
  • model:
    我們在建立新資料庫時的樣版。我們新增資料庫(CREATE DATABASE)時,系統第一步便會將model資料庫的內容100%複製過來,然後再依我們的需求進行修改。所以當你更改model資料庫後,日後新增的資料庫也會100%複製更改後model資料庫。例如:我們常用的預儲程序,我們新增一個sp_db_alert到model資料庫中,那未來新增的任何資料庫都包含這個預儲程序。
  • tempdb:
    是SQL Server用來當工作空間用的資料庫,如儲存使用者建議的暫存表格、儲存使用者宣告的全域變數…等。
  • msdb:
    SQL Server Agent用來安排警示(Alerts)、工作(Jobs)及記錄操作的資料庫。

伺服器角色


  • Bulkadmin:
    大量管理員 (bulkadmin) 固定伺服器角色的成員可以執行 BULK INSERT 陳述式。
  • Dbcreator:
    資料庫建立者 (dbcreator) 固定伺服器角色的成員可以建立、改變、卸除以及還原任何資料庫。
  • Diskadmin:
    磁碟管理員 (diskadmin) 固定伺服器角色的成員可以管理磁碟檔案。
  • Processadmin:
    處理序管理員 (processadmin) 固定伺服器角色的成員可以結束在 Database Engine 之執行個體中執行的處理序。
  • Securityadmin:
    安全性管理員 (securityadmin) 固定伺服器角色的成員,可以管理登入及其屬性。他們可以 GRANT、DENY 及 REVOKE 伺服器層級權限。他們也可以 GRANT、DENY 和 REVOKE 資料庫層級權限。此外,他們可以重設 SQL Server 登入的密碼。
  • Serveradmin:
    伺服器管理員 (serveradmin) 固定伺服器角色的成員可以變更整個伺服器的組態選項與關閉伺服器。
  • Setupadmin:
    setupadmin 固定伺服器角色的成員可以加入和移除連結伺服器,也可以執行一些系統預存程序。
  • Sysadmin:
    系統管理員 (sysadmin) 固定伺服器角色的成員可以執行 Database Engine 中的所有活動。依預設,Windows BUILTIN\Administrators 群組 (本機管理員群組) 的所有成員都是系統管理員 (sysadmin) 固定伺服器角色的成員。
  • Public:
    每一個 SQL Server 登入都屬於 public 伺服器角色。當伺服器主體未被授與或拒絕安全性實體物件的特定權限時,該使用者會繼承授與給該物件之 public 的權限。只有當您想要將任何物件提供給所有使用者使用時,才指派該物件的 public 權限。

  一般帳戶依預設選Public角色。

使用者對應


  選取此使用者登入後可以存取的資料庫。一般使用者不建議勾選系統資料庫。我們一開始有個「預設資料庫」,我們選擇的「master」,master是SQL Server系統資料庫,系統資料庫是很重要的基礎資料庫,怎麼會讓一般使用者可以登入使用,如果有人一個不小心,那你的SQL Server可能會直接掛點。在這個「使用者對應」頁面,你可以看到一個「已啟用master的Guest帳戶」,也就是說雖然你是一般帳戶來登入,但實際上是以Guest來與master溝通作業,Guest帳戶已經把會對master造成的傷害的動作做了一定的保護,所以就算一般使用者預設資料庫是選擇master也沒有關係。

安全性實體


  在此使用者、資料庫角色,或應用程式角色的資料庫安全性實體上設定權限。按一下 [搜尋],將資料庫安全性實體加入 [安全性實體] 方格中。然後選取方格中的安全性實體,並在 [明確權限] 方格中設定適當的權限。

  一般使用者使用預設值即可。

狀態


  • 連接到Database Engine的權限:即Windows驗證
  • 登入:即SQL Server驗證

  你可以暫時拒絕或停用此使用者來連接SQL Server。按下「確定」,完成新增登入使用者的動作。SSMSE的設定到此告一段落,要讓SQL Server開放遠端連線的還需要最後一步「SQL Server組態管理員」。

SQL Server組態管理員


SQL SERVER服務





  要提供SQL Server遠端連線的功能,除了SQL Server是一定要啟用之外,還需要確定「SQL Server Browser」這個服務是啟用的,在提供遠端連線的伺服器上可以將啟動模式設定為「自動」。



SQL SERVER網路組態





  網路組態重點在「TCP/IP」身上,預設SQL Server上的TCP/IP是停用的,這也是為什麼如果你沒有進來SQL Server組態管理員設定,前面做再多工也是白工。點擊兩下「TCP/IP」 → 通訊協定 → 已啟用 → 修改為「是」



  選擇「IP位址」 → 找到「IPAll」下方會有兩個項目:
  • TCP動態通訊埠:後面會帶一隨機數字。
  • TCP通訊埠

  請刪除「TCP動態通訊埠」後面的隨機數字,然後在「TCP通訊埠」輸入「1433」這個SQL Server預設連接通訊埠。



  接下「確認」,系統會提醒要重啟服務,設定才會生效,回到「SQL Server服務」,然後重啟SQL Server讓設定生效。



SSMSE連接遠端SQL SERVER



  我們到另一台電腦開啟SSMSE管理工具,然後依序輸入遠端SQL Server的認證資料,



  按下連接,



  我們可以很清楚的看到連線資訊,我們已經成功連接到遠端的SQL Server。但是還沒有結束,問題出在我們剛才設定的TCP/IP Port 1433身上。這個Port 1433可以說是SQL Server本身的連接預設Port,早期的SQL Server中有一個不需密碼的使用者"sa",而這個使用者又偏偏在SQL Server有極大的權利,可以呼風喚雨,而我們這些SQL Server安裝後設定的預設服務Port就是1433,而駭客們就是使用"人性=懶=惰性"的漏洞,許多的資料庫系統安裝人員很習慣性的「下一步」「下一步」,而建立了許多的「預設型」SQL Server,駭客們就先Scan你的網路是否有開啟1433 port,有的話,接著他會試著使用sa這個使用者來連接,因為不用密碼,然後就BingGo!或是你有設定密碼,駭客們也是可以慢慢猜,讓你防不勝防。

  所以一開始安裝時,我便不建議使用SQL Server驗證模式,因為在安裝啟用SQL Server驗證模式會啟用sa帳戶,那就算不啟用sa帳戶,那麼黑客們還是知道這個預設Port 1433,我們除了使用防火牆來加強安全外,另外我們還已可以修改這個預設Port 1433來避免一些不必要的問題。

修改SQL Server預設連接埠



  修改很簡單,SQL Server組態管理員 → SQL Server網路組態 → TCP/IP → IP位址 → IPAll → TCP通訊埠 → 將「TCP通訊埠」修改為大於1024的埠,我們設定為2000,然後重啟SQL Server服務。

  我們回到另一台電腦,使用SSMSE來連接,你會發現無法連接SQL Server了,這是因為SSMSE預設就是使用Port 1433來連接SQL Server,所以當你在SQL Server的預設Port修改之後,你也要跟SSMSE說現在要使用那個Port來與SQL Server連接。

設定SSMSE連接埠



  • 原:伺服器名稱:192.168.3.12\ICSSQL
  • 修:伺服器名稱:192.168.3.12\ICSSQL,2000
  在伺服器名稱最後加上一個「,(逗點)」,然後加上使用的Port。(註:如果你有使用過早期的管理工具,早期管理工具要設定埠是使用「:(冒號)」)




  這樣我們就完成了整個SQL Server的安裝及遠端連線的設定。

(5) ASP.NET連接遠端SQL Server



  好了,繞了一大圈,只為了一個遠端連接SQL Server?那遠端連接SQL Server要做什麼事?就我所知最大的好處就是分散式架構,什麼是分散式架構?我舉個例子,網站。

  SSMSE ←→ SQL Server ←→ AP / Web Page

  SSMSE比較是後端及管理者使用,管理者可以透過管理工具從遠端來對SQL Server進行管理工作。而前端的應用程式或網站,一樣可以和遠端的資料庫來連接而進行資料存取的工作。

  Web Site1 , Web Site2, WebSite3 … ←→ SQL Server

  Web Site1在新竹機房,Web Site2在深圳機房,Web Site3在日本機房…但SQL Server在香港機房,這樣的應用就是分散式架構,可以讓架構更有彈性更靈活的應用。

  以下我們就以ASP.NET來存取遠端資料庫來實作。

  我們先開啟Visual Studio 2008(註:Visual Web Developer也一樣,只不過稱呼有點不同),建立一個新網站,在左方「方案總管」下方切換到「伺服器總管」,在「資料連接」按左鍵「加入資料連接」



  選擇資料來源:Microsoft SQL Server



  繼續 → 加入連接:依序輸入連接資訊



  按一下「測試連接」,





DEFAULT.ASPX資料庫連接設定



  先拉一個SqlDataSource,然後「設定資料來源」,



  選擇資料連接



  將連接字串儲存到應用程式組態檔,



  設定Selete陳述式



  先勾選「*」,代表選擇所有資料行,然後點擊「進階」,



  勾選「產生INSERT、UPDATE、DELETE陳述式」,按「確定」,再按「下一步」,點擊「測試查詢」,



  點擊「完成」。

  再拉一個GridView控制項,「選擇資料來源」選擇「SqlDataSource1」,勾選「啟用分頁、排序、編輯、刪除」四項。





  儲存檔案,然後使用Visual Studio本身的網站伺服器來檢視網頁,



  一個擁有「編輯、刪除、排序、分頁」的網頁就馬上出現了,如果你寫過網頁程式,想想你之前花上述四個功能就要花你多少時間,現在不過是隨手之間,基本上我連半行程式都還沒開始寫就已經完成。

  以上ASP.NET的重點其實是在於「連線字串」這一行:

  Data Source=192.168.3.12\ICSSQL;Initial Catalog=Northwind;Persist Security Info=True;User ID=kkbruce;Password=1q2w3e4r5t

  透過它你就能跟遠端SQL Server連接來存取資料。如果不想使用資料連結控制項,那以上這行你就要跟它熟一點。

  • Data Source:連接的SQL Server;
  • Initial Catalog:要連接的資料庫;
  • User ID:SQL Server驗證登入帳戶;
  • Password:帳戶密碼;

  其他ADO.NET部分請自行參考書籍。

  現在不管這個Default.aspx放在那個地點,都可以正確連接資料庫來存取得資料(Data Source資料要正確,因為我們是使用虛擬IP),而這樣的運作才是Internet的本質。

  以上注重在安裝、設定2008 Express / SSMSE及簡易ASP.NET互動,資料庫上還有許多專業知識等大家去學習,這邊只是一個簡單的入門介紹,希望能幫助到大家。

 

 

 

http://blog.kkbruce.net/2009/08/microsoft-sql-server-2008-express.html#.UT6-JsAzASQ

arrow
arrow
    文章標籤
    MSSQL ASP.NET
    全站熱搜

    Y銘 發表在 痞客邦 留言(0) 人氣()