复制代理安全性模式

使用复制代理安全模式,可以对复制代理运行和建立连接所用的帐户进行精细粒度的控制:可以为每个代理指定不同的帐户。有关如何指定帐户的详细信息,请参阅管理复制中的登录名和密码

重要说明重要提示

sysadmin 固定服务器角色的成员配置复制时,可以配置复制代理来模拟 SQL Server 代理帐户。不指定复制代理的登录名和密码即可完成此操作;但是不推荐这种方法。作为最佳安全做法,建议以本主题后面的“代理所需权限”部分中介绍的最小权限来为每个代理指定一个帐户。

和所有可执行文件一样,复制代理在 Windows 帐户的上下文中运行。它们使用此帐户来建立 Windows 集成安全性连接。代理在哪个帐户之下运行取决于代理的启动方式:

  • 从 SQL Server 代理作业启动代理时,默认设置为:使用 SQL Server 代理作业来启动复制代理时,代理将在配置复制时所指定的帐户的上下文中运行。有关 SQL Server 代理和复制的详细信息,请参阅本主题后面的“SQL Server 代理下的代理安全性”部分。有关运行 SQL Server 代理的帐户所需权限的信息,请参阅配置 SQL Server 代理

  • 从 MS-DOS 命令行中直接启动或通过脚本启动代理时:代理在通过命令行运行代理的用户帐户的上下文中运行。

  • 从使用复制管理对象 (RMO) 或 ActiveX 控件的应用程序启动代理时:代理在调用 RMO 或 ActiveX 控件的应用程序的上下文中运行。

    注意注意

    不推荐使用 ActiveX 控件。

建议在 Windows 集成安全性的上下文中建立连接。为了向后兼容,还可以使用 SQL Server 安全性。有关最佳方法的详细信息,请参阅复制安全最佳实践

注意注意

从 SQL Server 2000 中创建的复制脚本应针对 SQL Server 2008 进行升级,以便利用安全性增强。有关详细信息,请参阅如何升级复制脚本(复制 Transact-SQL 编程)

代理所需权限

用来运行代理并建立连接的帐户需要多种权限。下表对这些权限进行了说明。建议每个代理使用不同的 Windows 帐户运行,并应仅授予帐户所需的权限。有关与多个代理相关的发布访问列表 (PAL) 的信息,请参阅保护发布服务器的安全

注意注意

Windows Vista 中的用户帐户控制 (UAC) 可防止对快照共享的管理访问。因此,必须为快照代理、分发代理和合并代理使用的 Windows 帐户显式授予快照共享权限。即使 Windows 帐户是管理员组的成员,也必须执行此操作。有关详细信息,请参阅保护快照文件夹的安全

代理

权限

快照代理

与分发服务器建立连接时,将使用运行代理的 Windows 帐户。此帐户必须:

  • 至少是分发数据库中的 db_owner 固定数据库角色的成员。

  • 对快照共享具有读取、写入和修改权限。

用于连接到发布服务器的帐户必须至少是发布数据库中的 db_owner 固定数据库角色的成员。

日志读取器代理

与分发服务器建立连接时,将使用运行代理的 Windows 帐户。此帐户必须至少是分发数据库中的 db_owner 固定数据库角色的成员。

用于连接到发布服务器的帐户必须至少是发布数据库中的 db_owner 固定数据库角色的成员。

推送订阅的分发代理

与分发服务器建立连接时,将使用运行代理的 Windows 帐户。此帐户必须:

  • 至少是分发数据库中的 db_owner 固定数据库角色的成员。

  • 是 PAL 的成员。

  • 对快照共享拥有读取权限。

  • 如果订阅针对非 SQL Server 订阅服务器,则具备对订阅服务器的 OLE DB 访问接口的安装目录的访问权限。

用于连接到订阅服务器的帐户必须至少是订阅数据库中的 db_owner 固定数据库角色的成员(或者如果订阅针对于非 SQL Server 订阅服务器,则必须具有同等权限)。

请求订阅的分发代理

与订阅服务器建立连接时,将使用运行代理的 Windows 帐户。此帐户必须至少是订阅数据库中的 db_owner 固定数据库角色的成员。

用于连接到分发服务器的帐户必须:

  • 是 PAL 的成员。

  • 对快照共享拥有读取权限。

推送订阅的合并代理

与发布服务器和分发服务器建立连接时,将使用运行代理的 Windows 帐户。此帐户必须:

  • 至少是分发数据库中的 db_owner 固定数据库角色的成员。

  • 是 PAL 的成员。

  • 是与发布数据库中的某个用户关联的登录名。

  • 对快照共享拥有读取权限。

用于连接到订阅服务器的帐户必须至少是订阅数据库中的 db_owner 固定数据库角色的成员。

请求订阅的合并代理

与订阅服务器建立连接时,将使用运行代理的 Windows 帐户。此帐户必须至少是订阅数据库中的 db_owner 固定数据库角色的成员。

用于连接到发布服务器和分发服务器的帐户必须:

  • 是 PAL 的成员。

  • 是与发布数据库中的某个用户关联的登录名。

  • 是与分发数据库中的某个用户关联的登录名。用户可以为 Guest 用户。

  • 对快照共享拥有读取权限。

队列读取器代理

与分发服务器建立连接时,将使用运行代理的 Windows 帐户。此帐户必须至少是分发数据库中的 db_owner 固定数据库角色的成员。

用于连接到发布服务器的帐户必须至少是发布数据库中的 db_owner 固定数据库角色的成员。

用于连接到订阅服务器的帐户必须至少是订阅数据库中的 db_owner 固定数据库角色的成员。

SQL Server 代理下的代理安全性

使用 SQL Server Management Studio、Transact-SQL 过程或 RMO 配置复制时,默认情况下将为每个代理创建 SQL Server 代理作业。然后,代理将使用作业步骤的上下文运行,而不管它们是连续运行、根据计划运行还是按需运行。可以在 SQL Server Management Studio 中的 Jobs 文件夹下查看这些作业。下表列出了作业名称。

代理

作业名称

快照代理

<发布服务器>-<发布数据库>-<发布>-<整数>

合并发布分区的快照代理

Dyn_<发布服务器>-<发布数据库>-<发布>-<GUID>

日志读取器代理

<发布服务器>-<发布数据库>-<整数>

请求订阅的合并代理

<发布服务器>-<发布数据库>-<发布>-<订阅服务器>-<订阅数据库>-<整数>

推送订阅的合并代理

<发布服务器>-<发布数据库>-<发布>-<订阅服务器>-<整数>

推送订阅的分发代理

<发布服务器>-<发布数据库>-<发布>-<订阅服务器>-<整数>1

请求订阅的分发代理

<发布服务器>-<发布数据库>-<发布>-<订阅服务器>-<订阅数据库>-<GUID>2

非 SQL Server 订阅服务器的推送订阅的分发代理

<发布服务器>-<发布数据库>-<发布>-<订阅服务器>-<整数>

队列读取器代理

[<分发服务器>].<整数>

1 对于 Oracle 发布的推送订阅,作业名称是**“<发布服务器>-<发布服务器>”,而不是“<发布服务器>-<发布数据库>”**。

2 对于 Oracle 发布的请求订阅,作业名称是**“<发布服务器>-<分发数据库>”,而不是“<发布服务器>-<发布数据库>”**。

配置复制时,指定运行代理应使用的帐户。但是,所有作业步骤都使用“代理”的安全上下文运行;因此,复制会为指定的代理帐户在内部执行下列映射:

注意注意

提供此信息有助于您了解使用适当的安全上下文运行代理时所涉及的内容。您不需要与已创建的凭据或代理进行直接交互。