設定 Web Deploy 發行的資料庫伺服器

作者 :Jason Lee

本主題描述如何設定 SQL Server 2008 R2 資料庫伺服器以支援 Web 部署和發佈。

本主題所述的工作是每個部署案例的常見工作,不論您的網頁伺服器是設定為使用 IIS Web 部署工具, (Web Deploy) 遠端代理程式服務、Web Deploy 處理常式或離線部署,還是您的應用程式是在單一網頁伺服器或伺服器陣列上執行。 部署資料庫的方式可能會根據安全性需求和其他考慮而變更。 例如,您可以使用或不使用範例資料來部署資料庫,而且您可以在部署之後部署使用者角色對應或手動設定它們。 不過,您設定資料庫伺服器的方式會維持不變。

您不需要安裝任何其他產品或工具,即可設定資料庫伺服器以支援 Web 部署。 假設您的資料庫伺服器和網頁伺服器在不同的電腦上執行,您只需要:

  • 允許SQL Server使用 TCP/IP 進行通訊。
  • 允許SQL Server流量通過任何防火牆。
  • 為網頁伺服器電腦帳戶提供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實例只需要包含Database Engine Services角色,此角色會自動包含在任何SQL Server安裝中。 不過,為了方便設定和維護,我們建議您包含 管理工具 – 基本管理工具 – 完成 伺服器角色。

注意

如需將電腦加入網域的詳細資訊,請參閱 將電腦加入網域和登入。 如需設定靜態 IP 位址的詳細資訊,請參閱 設定靜態 IP 位址。 如需安裝SQL Server的詳細資訊,請參閱安裝 SQL Server 2008 R2

啟用遠端存取SQL Server

SQL Server會使用 TCP/IP 與遠端電腦通訊。 如果您的資料庫伺服器和網頁伺服器位於不同的電腦上,您需要:

  • 設定SQL Server網路設定,以允許透過 TCP/IP 進行通訊。
  • 設定任何硬體或軟體防火牆,以允許 TCP 流量 (,在某些情況下,使用者資料包通訊協定 (UDP) 流量) SQL Server實例所使用的埠。

若要讓SQL Server透過 TCP/IP 進行通訊,請使用 SQL Server 組態管理員 來變更SQL Server實例的網路組態。

若要讓SQL Server使用 TCP/IP 進行通訊

  1. 在 [開始]功能表上,指向 [所有程式],按一下[Microsoft SQL Server 2008 R2],按一下 [組態工具],然後按一下[SQL Server 組態管理員]。

  2. 在樹狀檢視窗格中,展開[SQL Server網路組態],然後按一下[MSSQLSERVER 的通訊協定]。

    注意

    如果您已安裝多個 SQL Server 實例,您會看到每個實例的[實例名稱]通訊協定專案。 您必須依實例設定網路設定。

  3. 在詳細資料窗格中,以滑鼠右鍵按一下 [TCP/IP] 資料 列,然後按一下 [ 啟用]。

    在詳細資料窗格中,以滑鼠右鍵按一下 [TCP/IP] 資料列,然後按一下 [啟用]

  4. 在 [警告] 對話方塊中,按一下 [確定]

    在 [警告] 對話方塊中,按一下 [確定]

  5. 您必須重新開機 MSSQLSERVER 服務,新的網路設定才會生效。 您可以在命令提示字元、服務主控台或SQL Server Management Studio執行此動作。 在此程式中,您將使用 SQL Server Management Studio。

  6. 關閉 SQL Server 組態管理員。

  7. 在 [開始]功能表上,指向 [所有程式],按一下[Microsoft SQL Server 2008 R2],然後按一下[SQL Server Management Studio]。

  8. 在 [ 連接到伺服器 ] 對話方塊的 [ 伺服器名稱 ] 方塊中,輸入資料庫伺服器的名稱,然後按一下 [ 連接]。

    在 [連接到伺服器] 對話方塊的 [伺服器名稱] 方塊中,輸入資料庫伺服器的名稱,然後按一下 [連接]。

  9. [物件總管] 窗格中,以滑鼠右鍵按一下父伺服器節點 (,例如TESTDB1) ,然後按一下 [重新開機]。

    在 [物件總管] 窗格中,以滑鼠右鍵按一下父伺服器節點 (,例如 TESTDB1) ,然後按一下 [重新開機]。

  10. [Microsoft SQL Server Management Studio] 對話方塊中,按一下 []。

    在 [Microsoft SQL Server Management Studio] 對話方塊中,按一下 [是]。

  11. 當服務重新開機時,請關閉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實例通訊

  1. 在資料庫伺服器的 [ 開始] 功能表上,指向 [ 系統管理工具],然後按一下 [具有進階安全性的 Windows 防火牆]。

  2. 在樹狀檢視窗格中,按一下 [ 輸入規則]。

    在樹狀檢視窗格中,按一下 [輸入規則]。

  3. 在 [ 動作 ] 窗格的 [ 輸入規則] 底下,按一下 [ 新增規則]。

  4. 在 [新增輸入規則精靈] 的 [ 規則類型 ] 頁面上,選取 [ ],然後按 [ 下一步]。

    在 [新增輸入規則精靈] 的 [規則類型] 頁面上,選取 [埠],然後按 [下一步]。

  5. 在 [ 通訊協定和埠 ] 頁面上,確定已選取 [TCP ],然後在 [ 特定本機埠 ] 方塊中輸入 1433,然後按 [ 下一步]。

    在 [通訊協定和埠] 頁面上,確定已選取 [TCP],然後在 [特定本機埠] 方塊中輸入 1433,然後按 [下一步]。

  6. 在 [ 動作 ] 頁面上,保留 [ 允許選取連線 ],然後按 [ 下一步]。

  7. 在 [ 設定檔] 頁面上,保留 [ 網域 ] 的選取狀態,清除 [ 私人 ] 和 [ 公用 ] 核取方塊,然後按 [ 下一步]。

    在 [設定檔] 頁面上,保留 [網域] 的選取狀態,清除 [私人] 和 [公用] 核取方塊,然後按 [下一步]。

  8. 在 [名稱] 頁面上,為規則提供適當描述性的名稱 (,例如,SQL Server預設實例 – 網路存取) ,然後按一下 [完成]。

如需為 SQL Server設定 Windows 防火牆的詳細資訊,特別是如果您需要透過非標準或動態埠與SQL Server通訊,請參閱如何:設定適用于 Database Engine 存取的 Windows 防火牆

設定登入和資料庫許可權

當您將 Web 應用程式部署至 Internet Information Services (IIS) 時,應用程式會使用應用程式集區的身分識別來執行。 在網域環境中,應用程式集區身分識別會使用執行伺服器的電腦帳戶來存取網路資源。 電腦帳戶的格式為[domain name]< /strong >[machine name]$ ,例如FABRIKAM\TESTWEB1$。 若要允許 Web 應用程式透過網路存取資料庫,您需要:

  • 將網頁伺服器電腦帳戶的登入新增至 SQL Server 實例。
  • 將電腦帳戶登入對應至任何必要的資料庫角色, (通常會 db_datareaderdb_datawriter)

如果您的 Web 應用程式是在伺服器陣列上執行,而不是單一伺服器,您必須針對伺服器陣列中的每個網頁伺服器重複這些程式。

注意

如需應用程式集區身分識別和存取網路資源的詳細資訊,請參閱 應用程式集區身分識別

您可以透過各種方式處理這些工作。 若要建立登入,您可以:

  • 使用 Transact-SQL 或 SQL Server Management Studio,在資料庫伺服器上手動建立登入。
  • 在 Visual Studio 中使用 SQL Server 2008 Server Project 來建立及部署登入。

SQL Server登入是伺服器層級物件,而不是資料庫層級物件,因此不相依于您要部署的資料庫。 因此,您可以隨時建立登入,最簡單的方法是在資料庫伺服器上手動建立登入,然後再開始部署資料庫。 您可以使用下一個程式在 SQL Server Management Studio 中建立登入。

建立網頁伺服器電腦帳戶的SQL Server登入

  1. 在資料庫伺服器的 [開始]功能表上,指向 [所有程式],按一下[Microsoft SQL Server 2008 R2],然後按一下[SQL Server Management Studio]。

  2. 在 [ 連接到伺服器 ] 對話方塊的 [ 伺服器名稱 ] 方塊中,輸入資料庫伺服器的名稱,然後按一下 [ 連接]。

    下圖說明:在 [連接到伺服器] 對話方塊的 [伺服器名稱] 方塊中,輸入資料庫伺服器的名稱,然後按一下 [連接]。

  3. [物件總管] 窗格中,以滑鼠右鍵按一下 [安全性],指向 [新增],然後按一下 [登入]。

  4. 在 [ 登入 – 新增 ] 對話方塊的 [ 登入名稱 ] 方塊中,輸入網頁伺服器電腦帳戶的名稱 (,例如 FABRIKAM\TESTWEB1$) 。

    在 [登入 – 新增] 對話方塊的 [登入名稱] 方塊中,輸入網頁伺服器電腦帳戶的名稱 (,例如 FABRIKAM\TESTWEB1$) 。

  5. 按一下 [確定]。

此時,您的資料庫伺服器已準備好發佈 Web Deploy。 不過,在您將電腦帳戶登入對應至必要的資料庫角色之前,您部署的任何解決方案將無法運作。 將登入對應至資料庫角色需要更多考慮,因為您必須在部署資料庫之後才能對應角色。 若要將電腦帳戶登入對應至所需的資料庫角色,您可以:

  • 第一次部署資料庫之後,請手動將資料庫角色指派給登入。
  • 使用部署後腳本將資料庫角色指派給登入。

如需自動建立登入和資料庫角色對應的詳細資訊,請參閱 將資料庫角色成員資格部署至測試環境。 或者,您可以使用下一個程式,手動將電腦帳戶登入對應至必要的資料庫角色。 請記住,在部署資料庫 之後 ,您才能執行此程式。

將資料庫角色對應至 Web 服務器電腦帳戶登入

  1. 如先前一樣開啟SQL Server Management Studio。

  2. [物件總管] 窗格中,展開 [安全性] 節點、[登入] 節點,然後按兩下電腦帳戶登入 (例如FABRIKAM\TESTWEB1$) 。

    在 [物件總管] 窗格中,展開 [安全性] 節點、[登入] 節點,然後按兩下電腦帳戶登入 (例如 FABRIKAM\TESTWEB1$) 。

  3. 在 [ 登入屬性 ] 對話方塊中,按一下 [使用者對應]。

  4. 對應至此登入資料表的 [使用者 ] 中,選取您的資料庫名稱 (例如 ContactManager) 。

  5. [資料庫角色成員資格:[資料庫名稱] 清單中,選取所需的許可權。 在連絡人管理員範例解決方案的情況下,您必須選取 db_datareaderdb_datawriter 角色。

    在 [資料庫角色成員資格: [資料庫名稱] 清單中,選取所需的許可權。在連絡人管理員範例解決方案的情況下,您必須選取db_datareader和db_datawriter角色。

  6. 按一下 [確定]。

雖然手動對應資料庫角色通常比測試環境還足夠,但對預備或生產環境進行自動化或單鍵部署比較不理想。 如需使用部署後腳本將這類工作自動化的詳細資訊,請參閱 將資料庫角色成員資格部署至測試環境

注意

如需伺服器專案和資料庫專案的詳細資訊,請參閱Visual Studio 2010 SQL Server 資料庫專案

設定部署帳戶的許可權

如果您用來執行部署的帳戶不是SQL Server系統管理員,您也必須為此帳戶建立登入。 若要建立資料庫,帳戶必須是 dbcreator 伺服器角色的成員,或具有相等的許可權。

注意

當您使用 Web Deploy 或 VSDBCMD 來部署資料庫時,如果您的SQL Server實例設定為支援混合模式驗證) ,您可以使用 Windows 認證或SQL Server認證 (。 下一個程式假設您想要使用 Windows 認證,但在設定部署時,不會阻止您在連接字串中指定SQL Server使用者名稱和密碼。

設定部署帳戶的許可權

  1. 如先前一樣開啟SQL Server Management Studio。

  2. [物件總管] 窗格中,以滑鼠右鍵按一下 [安全性],指向 [新增],然後按一下 [登入]。

  3. 在 [ 登入 – 新增 ] 對話方塊的 [ 登入名稱 ] 方塊中,輸入部署帳戶的名稱 (,例如 FABRIKAM\matt) 。

  4. 在 [ 選取頁面] 窗格中,按一下 [ 伺服器角色]。

  5. 選取 [dbcreator],然後按一下 [ 確定]。

    選取 [dbcreator],然後按一下 [確定]。

若要支援後續部署,您也必須在第一次部署之後,將部署帳戶新增至資料庫上的 db_owner 角色。 這是因為在後續部署時,您會修改現有資料庫的架構,而不是建立新的資料庫。 如上一節所述,除非已建立資料庫,否則您無法將使用者新增至資料庫角色,原因明顯。

將部署帳戶登入對應至db_owner資料庫角色

  1. 如先前一樣開啟SQL Server Management Studio。

  2. [物件總管] 視窗中,展開 [安全性] 節點、[登入] 節點,然後按兩下電腦帳戶登入 (例如FABRIKAM\matt) 。

  3. 在 [ 登入屬性 ] 對話方塊中,按一下 [使用者對應]。

  4. 對應至此登入資料表的 [使用者 ] 中,選取您的資料庫名稱 (例如 ContactManager) 。

  5. [資料庫角色成員資格:[資料庫名稱] 清單中,選取 db_owner 角色。

    在 [資料庫角色成員資格: [資料庫名稱] 清單中,選取db_owner角色。

  6. 按一下 [確定]。

結論

您的資料庫伺服器現在應該已準備好接受遠端資料庫部署,並允許遠端 IIS 網頁伺服器存取您的資料庫。 在您嘗試部署和使用資料庫之前,您可能想要檢查下列重點:

  • 您是否已將SQL Server設定為接受遠端 TCP/IP 連線?
  • 您是否已設定任何防火牆以允許SQL Server流量?
  • 您是否為將存取SQL Server的每個網頁伺服器建立電腦帳戶登入?
  • 您的資料庫部署是否包含腳本來建立使用者角色對應,或您需要在第一次部署資料庫之後手動建立這些對應?
  • 您是否已建立部署帳戶的登入,並將其新增至 dbcreator 伺服器角色?

深入閱讀

如需部署資料庫專案的指引,請參閱 部署資料庫專案。 如需執行部署後腳本來建立資料庫角色成員資格的指引,請參閱 將資料庫角色成員資格部署至測試環境。 如需如何符合成員資格資料庫所造成獨特部署挑戰的指引,請參閱 將成員資格資料庫部署至企業環境