保護儲存在 SQL Server 中的 DTS 封裝安全

對於以 Microsoft SQL Server 2000 Data Transformation Services (DTS) 建立,並儲存在 msdb 資料庫中的封裝,有一個潛在的安全性問題。這個問題的焦點在完成這些 DTS 封裝最常見工作的系統預存程序 (執行常見工作的系統預存程序範例為 sp_enum_dtspackages 預存程序,其中會列出儲存在 msdb 資料庫中的 DTS 封裝。另一個範例為 sp_get_dtspackage 系統預存程序,該系統預存程序會將 DTS 封裝載入用戶端應用程式)。SQL Server 2000 Enterprise Manager、SQL Server Management Studio 和 DTS API 全都使用這些預存程序來完成常見工作。

只要您了解與 DTS 系統預存程序相關聯的潛在安全性問題,您就可以採取適當的行動來減少該項顧慮。

重要事項重要事項

Data Transformation Services (DTS) 已被取代。如需詳細資訊,請參閱<Data Transformation Services (DTS)>。

了解潛在安全性問題

在 SQL Server 2008 之前的 SQL Server 版本中,系統會將某些 DTS 系統預存程序的「執行」權限授與 PUBLIC。藉由使用這個設定,可以登入 msdb 資料庫的任何人都可以進行下列工作:

  • 取得 DTS 封裝的清單。

  • 擷取封裝本身。

  • 儲存新的封裝。

不過,只有封裝的擁有者可以藉由儲存新版本的封裝來修改現有的封裝,或刪除現有的封裝 (DTS 會藉由儲存新版本的封裝來修改封裝。DTS 不會複寫目前版本的封裝)。

如果應用程式使用擁有 DTS 封裝的登入連接到 SQL Server,則會發生潛在安全性問題。在此情況下,則有 SQL 資料隱碼攻擊可能會修改或刪除現有封裝的風險。

受影響的 DTS 系統預存程序

下列清單識別其「執行」權限授與 PUBLIC,而且可能造成潛在安全性問題的 DTS 系統預存程序:

  • sp_add_dtspackage

  • sp_drop_dtspackage

  • sp_dump_dtslog_all

  • sp_dump_dtspackagelog

  • sp_dump_dtssteplog

  • sp_dump_dtstasklog

  • sp_enum_dtspackagelog

  • sp_enum_dtspackages

  • sp_enum_dtssteplog

  • sp_enum_dtstasklog

  • sp_get_dtspackage

  • sp_get_dtsversion

  • sp_log_dtspackage_begin

  • sp_log_dtspackage_end

  • sp_log_dtsstep_begin

  • sp_log_dtsstep_end

  • sp_log_dtstask

  • sp_make_dtspackagename

  • sp_reassign_dtspackageowner

未受影響的 DTS 系統預存程序

下列清單識別其「執行」權限未授與 PUBLIC 的 DTS 系統預存程序:

  • sp_add_dtscategory

  • sp_drop_dtscategory

  • sp_enum_dtscategories

  • sp_modify_dtscategory

  • sp_reassign_dtspackagecategory

雖然這些系統預存程序的名稱中都有 "dts",但是這些程序不會產生本主題所描述的潛在安全性問題。

減少潛在安全性問題

為增加 DTS 封裝的安全性,SQL Server 2008 已經在下列狀況中變更了預設值:

  • 新的安裝。當您執行新的 SQL Server 2008 安裝時,系統會撤銷 PUBLIC 對於 DTS 系統預存程序的「執行」權限。管理與執行 DTS 封裝的權限只會被授與下列 Integration Services 資料庫層級角色,並透過這些角色授與:

    • db_ssisadmin

    • db_ssisltduser

    • db_ssisoperator

    如果您稍後將 DTS 封裝匯入到此 SQL Server 2008 執行個體中的 msdb 資料庫,則只有屬於這些 Integration Services 角色的帳戶可以成功管理與執行 DTS 封裝。

  • 升級。當您將舊版的 SQL Server 升級到 SQL Server 2008 時,系統不會撤銷 PUBLIC 對於 DTS 系統預存程序的「執行」權限。這樣會保留與現有應用程式的相容性。升級也會將「執行」權限授與本主題稍早列出的三個 Integration Services 資料庫層級角色。系統管理員應該盡快執行下節所描述的預存程序,以便從 PUBLIC 撤銷「執行」權限。

如需有關 Integration Services 角色的詳細資訊,請參閱<使用 Integration Services 角色>。

使用新的預存程序 sp_dts_secure

SQL Server 2008 包含新的系統預存程序 sp_dts_secure,用於管理 DTS 封裝的安全性。此程序有一個必要的輸入參數。此參數會對 DTS 系統預存程序撤銷或授與公開的「執行」權限:

  • 若要撤銷公開的「執行」權限,而且透過 Integration Services 資料庫層級角色僅將存取權授與這些角色,請執行 sp_dts_secure 程序與參數 1:

    sp_dts_secure 1

    若要將 DTS 預存程序的存取限制為授權的使用者,在您升級並套用 Integration Services 資料庫層級角色後,盡快執行此程序。

    [!附註]

    當您執行新的 SQL Server 2008 安裝時,安裝程式會針對 DTS 系統預存程序執行兩個動作。安裝程式會先撤銷 PUBLIC 的「執行」權限。接著,安裝程式會將「執行」權限授與本主題稍早列出的 Integration Services 資料庫層級角色。不過,當您手動執行 sp_dts_secure 1 時,此預存程序僅會針對 PUBLIC 撤銷 DTS 系統預存程序的「執行」權限。您必須個別套用 Integration Services 資料庫層級角色。

  • 若要授與 DTS 預存程序的公開「執行」權限,執行 sp_dts_secure 程序,並將參數設定為 0:

    sp_dts_secure 0

    如果您必須在準備重新啟用安全性限制的同時,保留與現有應用程式的相容性,您可以在新的安裝案例中使用此程序。

Integration Services 圖示 (小) 掌握 Integration Services 的最新狀態

若要取得 Microsoft 的最新下載、文件、範例和影片以及社群中的選定解決方案,請瀏覽 MSDN 或 TechNet 上的 Integration Services 頁面:

若要得到這些更新的自動通知,請訂閱該頁面上所提供的 RSS 摘要。