搜尋本站文章

2009-04-19

SQL Server 2008 介面區組態(Surface Area Configuration,SAC):啟用 xp_cmdshell


為了安全起見,預設在「介面區組態」內的功能,都已經停用。


xp_cmdshell (Transact-SQL)
繁衍 Windows 命令 Shell 並傳入字串中以供執行。任何輸出都會當作文字資料列來傳回。

xp_cmdshell 繁衍的 Windows 處理序擁有與 SQL Server 服務帳戶相同的安全性權限。
xp_cmdshell 會同步操作。完成 command-shell 命令時,才會將控制權傳回呼叫者。


若你確認需要啟用或是停用介面區組態上的功能,請參考以下的步驟:
使用 SQL Server Management Studio 中的「Facet」來設定啟用和停用 SQL Server 功能。
1. 使用 SQL Server Management Studio,連接到目標的 SQL Server。
2. 在 [物件總管] 中,點選目標伺服器,滑鼠右鍵,選擇「Facet」。 請參考下圖所示:
選取「Facet」01
3. 在「檢視 Facet」視窗,在右邊的「Facet」區域,選擇「介面區組態」。
4. 在右下角的「Facet屬性」區域,選擇所需要啟用或是停用的功能。
請參考下圖所示:
02_設定介面區組態


以下為使用 sp_configure 來啟用 xp_cmdshell:
--01 查詢是否已經啟用 xp_cmdshell
SELECT name N'組態選項的名稱', value N'針對這個選項所設定的值', value_in_use N'這個選項目前有效的執行值',
description N'組態選項的描述'
FROM sys.configurations
WHERE name='xp_cmdshell'

--02 設定啟用 xp_cmdshell
USE master;
GO
EXEC sp_configure 'show advanced option', '1';
GO
RECONFIGURE
GO
--
EXEC sp_configure 'xp_cmdshell', '1'
RECONFIGURE WITH OVERRIDE
GO

--03 再度查詢是否已經啟用 xp_cmdshell
SELECT name N'組態選項的名稱', value N'針對這個選項所設定的值', value_in_use N'這個選項目前有效的執行值',
description N'組態選項的描述'
FROM sys.configurations
WHERE name='xp_cmdshell'




在「介面區組態」部分,可以設定的功能有:1. 「AdHocRemoteQueriesEnabled」
是否要啟用「特定分散式查詢(Ad Hoc Distributed Queries)」。根據預設,SQL Server 不允許使用 OPENROWSET 和 OPENDATASOURCE 進行特定分散式查詢。當啟用選項時,SQL Server 就會允許特定存取。當此選項未設定或設定為 0 時,SQL Server 就不允許特定存取。

2. 「ClrIntegrationEnabled」
使用「clr enabled」選項來指定 SQL Server 是否能執行使用者組件。
WOW64 伺服器必須重新啟動之後,對此設定的變更才能生效。對於其他伺服器類型,則不需要重新啟動。

3. 「DatabaseMailEnabled」
是否要啟用「Database Mail XP」選項
設定立即生效,伺服器不必停止再重新啟動。

4. 「OleAutomationEnabled」
是否要啟用啟用「OLE Automation Procedures」選項。
使用 Ole Automation Procedures 選項可指定 OLE Automation 物件是否可在 Transact-SQL 批次內部啟動。您也可以使用以原則為基礎的管理或 sp_configure 預存程序來設定這個選項。
啟用 OLE Automation Procedures 時,對 sp_OACreate 的呼叫會啟動 OLE 共用執行環境。

5. 「RemoteDacEnabled」
是否啟用「remote admin connections」選項。
SQL Server 會提供專用管理員連接 (DAC)。
DAC 可讓系統管理員存取執行中的伺服器,如此一來,即使伺服器遭到鎖定或在異常狀態中執行,而且未回應 Database Engine 連接時,也能執行診斷功能或 Transact-SQL 陳述式,或針對伺服器上的問題進行疑難排解。
依預設,只能從伺服器上的用戶端使用 DAC。

根據預設,DAC 只會接聽回送 IP 位址 (127.0.0.1)、通訊埠 1434。
6. 「ServiceBrokerEndpointActive」
依預設,SQL Server 的執行個體不包含 Service Broker 端點。
因此,Service Broker 預設不會透過網路傳送或接收訊息。您必須建立 Service Broker 端點,以在 SQL Server 執行個體以外傳送或接收訊息。

端點是 SQL Server 物件,代表 SQL Server 透過網路進行通訊的能力。每個端點都支援特定類型的通訊。例如,HTTP 端點可讓 SQL Server 處理特定的 SOAP 要求。Service Broker 端點會設定 SQL Server,以透過網路傳送和接收 Service Broker 訊息。
Service Broker 端點提供了傳輸安全性和訊息轉送的選項,並在特定 TCP 通訊埠編號上進行接聽。
7. 「SoapEndpointsEnabled」
是否啟用「SOAP 端點」選項。

8. 「SqlMailEnabled」
使用「SQL Mail XPs」選項,啟用此伺服器的 SQL Mail。設定立即生效,伺服器不必停止再重新啟動。
SQL Mail 已經在 SQL Server 2005版本,被 Database Mail所取代。

未來的 Microsoft SQL Server 版本將移除這項功能。
請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。. 若要從 Microsoft SQL Server 傳送郵件,請使用 Database Mail。

9. 「WebAssistantEnabled」
是否可以執行「Web 助理預存程序(Web Assistant Procedures)」來產生 HTML 程式碼。
在 SQL Server 2005部分已經被取代。

10. 「XPCmdShellEnabled」
是否啟用xp_cmdshell 選項。

此為是 SQL Server 2005 所推出的新功能,為伺服器的組態選項,可讓系統管理員控制 xp_cmdshell 擴充預存程序是否可在系統上執行。
根據預設,xp_cmdshell 選項會在新安裝上停用,而且可以使用以原則為基礎的管理或執行 sp_configure 系統預存程序來啟用。


參考文件:
消失的管理工具:SQL Server 介面區組態(SAC)-- SQL Server 2008http://sharedderrick.blogspot.com/2007/11/sql-server-sac.html
SQL Server 2008 線上叢書 (August 2008)
SQL Server 2008 安全性變更
http://msdn.microsoft.com/zh-tw/library/cc280562.aspx
SQL Server 2008 線上叢書 (August 2008)
最小化 SQL Server 2008 介面區
http://msdn.microsoft.com/zh-tw/library/cc281850.aspx
SQL Server 2008 線上叢書 (August 2008)
在 SQL Server 2008 中停止 SQL Server 的功能
http://msdn.microsoft.com/zh-tw/library/cc707782.aspx