保护存储在 SQL Server 中的 DTS 包

对于在 Microsoft SQL Server 2000 Data Transformation Services (DTS) 中创建的包和存储在 msdb 数据库中的包,具有潜在的安全性问题。此问题主要集中于完成这些 DTS 包的最常见任务所使用的系统存储过程。(执行常见任务的一个系统存储过程的示例是 sp_enum_dtspackages 存储过程,该过程列出存储在 msdb 数据库中的 DTS 包。另一个示例是将 DTS 包加载到客户端应用程序的 sp_get_dtspackage 系统存储过程。)SQL Server 2000 企业管理器、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 包的安全性。此过程有一个必需的输入参数。此参数可撤消或授予 public 对 DTS 系统存储过程的执行权限:

  • 若要撤消 public 的执行权限,并只将访问权限授予 Integration Services 数据库级的角色且只通过这些角色授予访问权限,可运行带有参数 1 的 sp_dts_secure 过程:

    sp_dts_secure 1

    若要限制授权用户对 DTS 存储过程的访问,应在升级后尽快运行此过程,并应用 Integration Services 数据库级角色。

    注意注意

    执行 SQL Server 2008 的全新安装时,安装程序将对 DTS 系统存储过程执行两个操作。安装程序首先撤消 PUBLIC 的执行权限。然后,安装程序将执行权限授予之前在本主题中列出的 Integration Services 数据库级角色。但是,在您手动运行 sp_dts_secure 1 时,此存储过程将只撤消 PUBLIC 对 DTS 系统存储过程的执行权限。您必须分别应用 Integration Services 数据库级角色。

  • 若要授予 public 对 DTS 存储过程的执行权限,请运行其参数设置为 0 的 sp_dts_secure 过程:

    sp_dts_secure 0

    如果您在准备重新启用安全性限制时需要保留与现有应用程序的兼容性,则可以在新的安装方案中使用此过程。

Integration Services 图标(小) 使 Integration Services 保持最新

若要从 Microsoft 获得最新的下载内容、文章、示例和视频,以及从社区获得所选解决方案,请访问 MSDN 或 TechNet 上的 Integration Services 页:

若要获得有关这些更新的自动通知,请订阅该页上提供的 RSS 源。