保護儲存在 SQL Server 中的 DTS 封裝安全
對於以 MicrosoftSQL 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
如果您必須在準備重新啟用安全性限制的同時,保留與現有應用程式的相容性,您可以在新的安裝案例中使用此程序。
|