設定 Web Deploy 發行的資料庫伺服器
演講者:Jason Lee
本主題介紹如何設定 SQL Server 2008 R2 資料庫伺服器,以支援 Web 部署和發佈。
本主題中所述的任務對於每個部署方案都是通用的,無論您的 Web 伺服器是否設定為使用 IIS Web 部署工具 (Web Deploy) 遠端代理服務、Web 部署處理常式或離線部署,或您的應用程式在單一 Web 伺服器或伺服器場上運作。 部署資料庫的方式可能會根據安全要求和其他考慮因素而改變。 例如,您可以部署具有或不帶有範例資料的資料庫,並且可以部署使用者角色對應或在部署後手動設定它們。 但是,設定資料庫伺服器的方式保持不變。
您無需安裝任何其他產品或工具來設定資料庫伺服器以支援 Web 部署。 假設您的資料庫伺服器和 Web 伺服器執行在不同的電腦上,您只需:
- 允許 SQL Server 使用 TCP/IP 進行通訊。
- 允許 SQL Server 流量通過任何防火牆。
- 為 Web 伺服器電腦帳戶提供 SQL Server 登入名稱。
- 將電腦帳戶登入對應到任何所需的資料庫角色。
- 為將執行部署的帳戶授予 SQL Server 登入名稱和資料庫建立者權限。
- 若要支援重複部署,請將部署帳號登入對應到 db_owner 資料庫角色。
本主題將示範如何執行其中每個流程。 本主題中的任務和演練假設您從在 Windows Server 2008 R2 上執行的 SQL Server 2008 R2 預設執行個體開始。 在繼續之前,請確保:
- Windows Server 2008 R2 Service Pack 1 與所有可用更新已安裝。
- 伺服器已加入網域。
- 伺服器有一個靜態 IP 位址。
- SQL Server 2008 R2 Service Pack 1 和所有可用更新均已安裝。
SQL Server 執行個體只需包含資料庫引擎服務角色,該角色會自動包含在任何 SQL Server 安裝中。 但是,為了方便設定和維護,我們建議您包含管理工具 - 基本和管理工具 - 完整伺服器角色。
注意
有關將電腦加入網域的詳細資訊,請參閱「將電腦加入網域並登入」。 有關設定靜態 IP 位址的詳細資訊,請參閱「設定靜態 IP 位址」。 有關安裝 SQL Server 的詳細資訊,請參閱「安裝 SQL Server 2008 R2」。
啟用對 SQL Server 的遠端存取
SQL Server 使用 TCP/IP 與遠端電腦通訊。 如果您的資料庫伺服器和 Web 伺服器位於不同的電腦上,您需要:
- 設定 SQL Server 網路設定以允許透過 TCP/IP 進行通訊。
- 設定任何硬體或軟體防火牆以允許 SQL Server 執行個體使用的連接埠上的 TCP 流量 (在某些情況下也允許使用者資料封包通訊協定 (UDP) 流量)。
若要使 SQL Server 能夠透過 TCP/IP 進行通訊,請使用 SQL Server 設定管理器變更 SQL Server 執行個體的網路設定。
要讓 SQL Server 使用 TCP/IP 進行通訊
在「開始」功能表上,依序按一下「所有程式」、「Microsoft SQL Server 2008 R2」和「組態工具」,然後按一下 「SQL Server 組態管理員」。
在樹狀圖視窗中,展開「SQL Server 網路設定」,然後按一下「MSSQLSERVER 的通訊協定」。
注意
如果您安裝了多個 SQL Server 執行個體,您將看到每個執行個體都有一個「[執行個體名稱] 通訊協定」項目。 您需要逐個執行個體設定網路設定。
在詳細資料窗格中,以滑鼠以滑鼠右鍵按一下 TCP/IP 行,然後按一下「啟用」。
在「警告」對話方塊中,按一下「確定」。
您需要重新啟動 MSSQLSERVER 服務,新的網路設定才會生效。 您可以在命令提示字元、服務主控台或 SQL Server Management Studio 中執行此操作。 在此程序中,您將使用 SQL Server Management Studio。
關閉 SQL Server 組態管理員。
在「開始」,依序按一下「所有程式」和「Microsoft SQL Server 2008 R2」,然後按一下「SQL Server Management Studio」。
在「連接到伺服器」對話方塊的「伺服器名稱」方塊中,鍵入資料庫伺服器的名稱,然後按一下「連線」。
在「Object Explorer」窗格中,以滑鼠以滑鼠右鍵按一下父伺服器節點 (例如,TESTDB1),然後按一下「重新啟動」。
在「Microsoft SQL Server Management Studio」對話方塊中,按一下「是」。
服務重新啟動後,關閉 SQL Server Management Studio。
若要允許 SQL Server 流量通過防火牆,您首先需要知道 SQL Server 執行個體正在使用哪些連接埠。 這將取決於 SQL Server 執行個體的建立和設定方式:
- SQL Server 的預設執行個體會偵聽 (並回應) TCP 連接埠 1433 上的請求。
- SQL Server 的命名執行個體會偵聽 (並回應) 動態指派的 TCP 連接埠上的請求。
- 如果啟用了 SQL Server Browser 服務,用戶端可以在 UDP 連接埠 1434 上查詢該服務,以找出特定 SQL Server 執行個體所使用的 TCP 連接埠。 但是,出於安全原因,此服務經常被停用。
假設您使用的是 SQL Server 的預設執行個體,您需要設定防火牆以允許流量。
方向 | 從港口出發 | 至港口 | 連接埠類型 |
---|---|---|---|
傳入 | 任意 | 1433 | TCP |
輸出 | 1433 | 任意 | TCP |
注意
從技術上講,用戶端電腦將使用 1024 到 5000 之間隨機分配的 TCP 連接埠與 SQL Server 進行通訊,您可以相應地限制防火牆規則。 有關 SQL Server 連接埠和防火牆的詳細資訊,請參閱「透過防火牆與 SQL 通訊所需的 TCP/IP 連接埠號碼」和「作法:將伺服器設定為偵聽特定 TCP 連接埠 (SQL Server 設定管理員)」。
在大多數 Windows Server 環境中,您可能必須在資料庫伺服器上設定 Windows 防火牆。 預設情況下,Windows 防火牆允許所有出站流量,除非規則明確禁止。 若要讓 Web 伺服器能夠存取資料庫,您需要設定輸入規則,以允許 SQL Server 執行個體使用的連接埠號碼上的 TCP 流量。 如果您使用的是 SQL Server 的預設執行個體,則可以使用下一程序來設定此規則。
要設定 Windows 防火牆以允許與預設 SQL Server 執行個體進行通訊
在資料庫伺服器的「開始」功能表上,指向「管理工具」,然後按一下「Windows 防火牆與進階安全性」。
在樹狀圖視窗中,按一下「輸入規則」。
在「動作」窗格中的「輸入規則」下,按一下「新規則」。
在新輸入規則精靈的「規則類型」頁面上,選擇「連接埠」,然後按一下「下一步」。
在「通訊協定和連接埠」頁面上,請確保選擇「TCP」,然後在「特定本機連接埠」方塊中鍵入 1433,然後按一下「下一步」。
在「動作」頁面上,保留選取「允許連線」,然後按一下「下一步」。
在「設定檔」頁面中,選取「網域」、「私人」和「公用」核取方塊,然後按「下一步」。
在「名稱」頁面上,為規則指定一個適當的描述性名稱 (例如,SQL Server 預設執行個體 - 網路存取),然後按一下「完成」。
有關為 SQL Server 設定 Windows 防火牆的詳細資訊,特別是如果需要透過非標準或動態連接埠與 SQL Server 進行通訊,請參閱「作法:設定 Windows 防火牆以進行資料庫引擎存取」。
設定登入名稱和資料庫權限
當您將 Web 應用程式部署到 Internet 資訊服務 (IIS) 時,該應用程式將使用應用程式集區的識別來執行。 在網域環境中,應用程式集區標識使用執行它們的伺服器的電腦帳戶來存取網路資源。 電腦帳戶採用 [網域]</strong>[電腦名稱]$ 的形式,例如,FABRIKAM\TESTWEB1$。 要允許您的 Web 應用程式透過網路存取資料庫,您需要:
- 將 Web 伺服器電腦帳戶的登入名稱新增至 SQL Server 執行個體。
- 將電腦帳戶登入對應到任何所需的資料庫角色 (通常是 db_datareader 和 db_datawriter)。
如果您的 Web 應用程式在伺服器集區而不是單一伺服器上執行,則需要對伺服器集區中的每個 Web 伺服器重複這些程序。
注意
有關應用程式集區標識和存取網路資源的更多資訊,請參閱「應用程式集區識別碼」。
您可以透過多種方式完成這些任務。 若要建立登入名,您可以:
- 使用 Transact-SQL 或 SQL Server Management Studio 在資料庫伺服器上手動建立登入名稱。
- 使用 Visual Studio 中的 SQL Server 2008 伺服器專案來建立和部署登入。
SQL Server 登入是伺服器級物件,而不是資料庫級物件,因此它不依賴要部署的資料庫。 因此,您可以隨時建立登入名,最簡單的方法通常是在開始部署資料庫之前在資料庫伺服器上手動建立登入名稱。 您可以使用下一個程序在 SQL Server Management Studio 中建立登入名稱。
要為 Web 伺服器電腦帳戶建立 SQL Server 登入名稱
在資料庫伺服器的「開始」功能表上,指向「所有程式」,按一下「Microsoft SQL Server 2008 R2」,然後按一下「SQL Server Management Studio」。
在「連接到伺服器」對話方塊的「伺服器名稱」方塊中,鍵入資料庫伺服器的名稱,然後按一下「連線」。
在「Object Explorer」窗格中,以滑鼠以滑鼠右鍵按一下「安全性」,指向「新增」,然後按一下「登入」。
在「登入 – 新增」對話方塊的「登入名稱」方塊中,鍵入 Web 伺服器電腦帳戶的名稱 (例如 FABRIKAM\TESTWEB1$)。
按一下 [確定]。
此時,您的資料庫伺服器已準備好進行 Web 部署發佈。 但是,在將電腦帳戶登入名稱對應到所需的資料庫角色之前,您部署的任何解決方案都不會起作用。 將登入名稱對應到資料庫角色需要更多的思考,因為在部署資料庫之前您無法對應角色。 若要將電腦帳戶登入對應到所需的資料庫角色,您可以:
- 首次部署資料庫後,手動將資料庫角色指派給登入名稱。
- 使用部署後指令碼將資料庫角色指派給登入名稱。
有關自動建立登入名稱和資料庫角色對應的更多資訊,請參閱「將資料庫角色成員資格部署到測試環境」。 或者,您可以使用下一個程序,手動將電腦帳戶登入對應到所需的資料庫角色。 請記住,只有在部署資料庫之後才能執行此程序。
要將資料庫角色對應到 Web 伺服器電腦帳戶登入
像以前一樣開啟 SQL Server Management Studio。
在「Object Explorer」窗格中,展開「安全性」節點,展開「登入」節點,然後按兩下電腦帳戶登入名稱 (例如,FABRIKAM\TESTWEB1$)。
在「登入屬性」對話方塊中,按一下「使用者對應」。
在對應到此登入的使用者表中,選擇資料庫的名稱 (例如,ContactManager)。
在「資料庫角色成員資格: [資料庫名稱]」清單中,選擇所需的權限。 對於連絡人管理員範例解決方案,您必須選擇 db_datareader 和 db_datawriter 角色。
按一下 [確定]。
雖然手動對應資料庫角色對於測試環境來說通常綽綽有餘,但對於自動或一鍵部署到預備或生產環境來說不太理想。 您可以在「將資料庫角色成員資格部署到測試環境」中找到有關使用部署後指令碼自動執行此類任務的更多資訊。
注意
有關伺服器專案和資料庫專案的詳細資訊,請參閱「Visual Studio 2010 SQL Server 資料庫專案」。
設定部署帳戶的權限
如果您將用於執行部署的帳戶不是 SQL Server 管理員,您還需要為此帳戶建立登入名稱。 為了建立資料庫,該帳戶必須是 dbcreator 伺服器角色的成員或具有同等權限。
注意
當您使用 Web Deploy 或 VSDBCMD 部署資料庫時,您可以使用 Windows 憑證或 SQL Server 憑證 (如果您的 SQL Server 執行個體設定為支援混合模式驗證)。 下一個程序假設您要使用 Windows 憑證,但在設定部署時,您可以在連線字串中指定 SQL Server 使用者名稱和密碼。
要設定部署帳戶的權限
像以前一樣開啟 SQL Server Management Studio。
在「Object Explorer」窗格中,以滑鼠以滑鼠右鍵按一下「安全性」,指向「新增」,然後按一下「登入」。
在「登入 - 新增」對話方塊的「登入名稱」方塊中,鍵入部署帳戶的名稱 (例如 FABRIKAM\matt)。
在「選擇頁面」窗格中,按一下「伺服器角色」。
選擇 dbcreator,然後按一下「確定」。
為了支援後續部署,您還需要在第一次部署後將部署帳戶新增至資料庫上的 db_owner 角色。 這是因為在後續部署中,您將修改現有資料庫的架構,而不是建立新資料庫。 如上一節所述,出於顯而易見的原因,在建立資料庫之前,您無法將使用者新增至資料庫角色。
要將部署帳號登入對應到 db_owner 資料庫角色
像以前一樣開啟 SQL Server Management Studio。
在「Object Explorer」視窗中,展開「安全性」節點,展開「登入」節點,然後按兩下電腦帳戶登入名稱 (例如,FABRIKAM\matt)。
在「登入屬性」對話方塊中,按一下「使用者對應」。
在對應到此登入的使用者表中,選擇資料庫的名稱 (例如,ContactManager)。
在「資料庫角色成員資格: [資料庫名稱]」清單中,選擇 db_owner 角色。
按一下 [確定]。
結論
您的資料庫伺服器現在應該已準備好接受遠端資料庫部署,並允許遠端 IIS Web 伺服器存取您的資料庫。 在嘗試部署和使用資料庫之前,您可能需要檢查以下要點:
- 您是否已將 SQL Server 設定為接受遠端 TCP/IP 連線?
- 您是否設定了任何防火牆以允許 SQL Server 流量?
- 您是否為每個將存取 SQL Server 的 Web 伺服器建立了電腦帳戶登入名稱?
- 您的資料庫部署是否包含用於建立使用者角色對應的指令碼,或者您是否需要在首次部署資料庫後手動建立這些對應?
- 您是否為部署帳戶建立了登入名稱,並將其新增至 dbcreator 伺服器角色?
深入閱讀
有關部署資料庫專案的指南,請參閱「部署資料庫專案」。 有關透過執行部署後指令碼建立資料庫角色成員資格的指南,請參閱「將資料庫角色成員資格部署至測試環境」。 有關如何應對成員資格資料庫帶來的獨特部署挑戰的指南,請參閱「將成員資格資料庫部署到企業環境」。