查看和修改复制安全设置

本主题介绍如何使用 SQL Server Management Studio、Transact-SQL 或复制管理对象(RMO)在 SQL Server 2014 中查看和修改复制安全设置。 例如,您可能需要将日志读取器代理到发布服务器的连接从 SQL Server 身份验证更改为 Windows 集成身份验证,或者您可能需要在 Window 帐户密码更改后更改用于运行代理作业的凭据。 有关每个代理所需权限的信息,请参阅 R复制代理安全模式

本主题内容

开始之前

限制和局限

  • 所使用的存储过程将取决于代理的类型和服务器连接的类型。

  • 使用的 RMO 类和属性取决于代理的类型和服务器连接的类型。

安全性

出于安全考虑,在复制存储过程返回的结果集中掩盖密码的实际值。

权限

使用 SQL Server Management Studio

在下列对话框中查看和修改安全设置:

  1. “更新复制密码”对话框,可以通过 SQL Server Management Studio 的“复制”文件夹访问。 如果更改复制拓扑中某服务器上 SQL Server 帐户或 Windows 帐户的密码,请使用此对话框,而不用更新使用此帐户的每个代理的密码。 如果多台服务器上的代理使用相同的帐户,则必须连接到每台服务器并更改密码。 在复制使用该密码的所有地方的密码将被更新, 而其他地方(如链接服务器)的密码将不更新。

  2. “发布属性 - <发布>”对话框的“代理安全性”页。 有关访问此对话框的详细信息,请参阅 View and Modify Publication Properties

  3. “订阅属性 - <订阅>”对话框。 有关访问此对话框的详细信息,请参阅 View and Modify Push Subscription PropertiesView and Modify Pull Subscription Properties

  4. “分发服务器属性 - <分发服务器>”和“分发数据库属性 - <数据库>”对话框。 有关访问这些对话框的详细信息,请参阅 View and Modify Distributor and Publisher Properties

  5. “发布服务器属性 - <发布服务器>”对话框。 有关访问此对话框的详细信息,请参阅 View and Modify Distributor and Publisher Properties

更改一个或多个代理所用帐户的密码

  1. 如果该帐户是 SQL Server 帐户,此对话框还将更改 SQL Server 帐户的密码。 如果该帐户是 Windows 帐户,请首先在 Windows 中更改密码。 有关详细信息,请参阅 Windows 文档。

    注意

    更改复制密码后,必须停止并重新启动使用该密码的每个代理,这样代理的更改才能生效。

  2. 在 SQL Server Management Studio 中连接到服务器,然后展开服务器节点。

  3. 右键单击 “复制” 文件夹,再单击 “更新复制密码”

  4. “更新复制密码” 对话框中指定帐户和新密码。

  5. 单击“确定”。

更改快照代理的安全设置

  1. 在“发布属性 - <发布>”对话框的“代理安全性”页上,单击“快照代理”文本框旁边的“安全设置”按钮。

  2. “快照代理安全性” 对话框中指定运行该代理的帐户:

    • “代理帐户” 文本框中,输入一个新的 Windows 帐户。

    • “密码”“确认密码” 文本框中,输入一个新的强密码。

  3. 指定将该代理从分发服务器连接到发布服务器的上下文。 如果选中 “使用以下 SQL Server 登录名”,还必须指定登录名:

    • “登录名” 文本框中,输入登录名

    • “密码”“确认密码” 文本框中,输入一个新的强密码。

    注意

    如果发布服务器是 Oracle 发布服务器,则连接上下文在“分发服务器属性 - <分发服务器>”对话框中指定。 有关更改上下文的过程,请参阅下面的内容。

  4. 单击“确定”。

更改日志读取器代理的安全设置

  1. 在“发布属性 - <发布>”对话框的“代理安全性”页上,单击“日志读取器代理”文本框旁边的“安全设置”按钮。

  2. “日志读取器代理安全性” 对话框中指定运行该代理的帐户:

    • “代理帐户” 文本框中,输入新的 Windows 帐户

    • “密码”“确认密码” 文本框中,输入一个新的强密码。

  3. 指定将该代理从分发服务器连接到发布服务器的上下文。 如果选中 “使用以下 SQL Server 登录名”,还必须指定登录名:

    • “登录名” 文本框中,输入登录名

    • “密码”“确认密码” 文本框中,输入一个新的强密码。

    注意

    如果发布服务器是 Oracle 发布服务器,则连接上下文在“分发服务器属性 - <分发服务器>”对话框中指定。 通过下面的过程更改上下文。

  4. 单击 “确定”

    注意

    每个已发布数据库都有一个日志读取器代理。 在一个发布上更改代理的安全设置会影响发布数据库中所有发布的设置。

更改将 Oracle 发布的快照代理和日志读取器代理连接到发布服务器的上下文

  1. 在“分发服务器属性 - <分发服务器>”对话框的“发布服务器”页上,单击“发布服务器”旁边的属性按钮 (...)。

  2. “到发布服务器的代理连接” 部分指定已配置的复制管理用户架构所使用的登录名和密码。 有关详细信息,请参阅配置 Oracle 发布服务器

  3. 单击“确定”。

更改推送订阅的分发代理的安全设置

  1. 在发布服务器的“订阅属性 - <订阅>”对话框中,可以进行以下更改:

    • 若要更改运行分发代理并将其连接到分发服务器的帐户,请单击“代理进程帐户”行,再单击该行中的属性按钮 (...)。“分发代理安全性” 对话框中指定帐户和密码。

    • 若要更改将分发代理连接到订阅服务器的上下文,请单击“订阅服务器连接”行,再单击该行中的属性按钮 (...)。“输入连接信息” 对话框中指定上下文。

      如果使用排队更新订阅,队列读取器代理还将使用为订阅服务器的连接指定的上下文。

  2. 单击“确定”。

更改请求订阅的分发代理的安全设置

  1. 在订阅服务器的“订阅属性 - <订阅>”对话框中,可以进行以下更改:

    • 若要更改运行分发代理并将其连接到订阅服务器的帐户,请单击“代理进程帐户”行,再单击该行中的属性按钮 (...)。“分发代理安全性” 对话框中指定帐户和密码。

      如果使用排队更新订阅,队列读取器代理还将使用为订阅服务器的连接指定的上下文。

    • 若要更改将分发代理连接到分发服务器的上下文,请单击“分发服务器连接”行,再单击该行中的属性按钮 (...)。“输入连接信息” 对话框中指定上下文。

  2. 单击“确定”。

更改推送订阅的合并代理的安全设置

  1. 在发布服务器的“订阅属性 - <订阅>”对话框中,可以进行以下更改:

    • 若要更改运行合并代理并将其连接到发布服务器的帐户,请单击“代理进程帐户”行,再单击该行中的属性按钮 (...)。“合并代理安全性” 对话框中指定帐户和密码。

    • 若要更改将合并代理连接到订阅服务器的上下文,请单击“订阅服务器连接”行,再单击该行中的属性按钮 (...)。“输入连接信息” 对话框中指定上下文。

  2. 单击“确定”。

更改请求订阅的合并代理的安全设置

  1. 在订阅服务器的“订阅属性 - <订阅>”对话框中,可以进行以下更改:

    • 若要更改运行合并代理并将其连接到订阅服务器的帐户,请单击“代理进程帐户”行,再单击该行中的属性按钮 (...)。“合并代理安全性” 对话框中指定帐户和密码。

    • 若要更改将合并代理连接到发布服务器和分发服务器的上下文,请单击“发布服务器连接”行,再单击该行中的属性按钮 (...)。“输入连接信息” 对话框中指定上下文。

  2. 单击“确定”。

更改运行队列读取器代理的帐户

  1. 在“分发服务器属性 - <分发服务器>”对话框的“常规”页上,单击分发数据库旁边的属性 (...) 按钮。

  2. 在“分发数据库属性 - <数据库>”对话框中,单击“代理进程帐户”文本框旁边的“安全设置”按钮。

  3. “队列读取器代理安全性” 对话框中,指定运行代理并将其连接到分发服务器的帐户:

    • “进程帐户” 文本框中,输入一个新的 Windows 帐户

    • “密码”“确认密码” 文本框中,输入一个新的强密码。

  4. 单击 “确定”

    注意

    每个分发数据库都有一个队列读取器代理。 更改代理的安全设置会影响使用此分发数据库的所有发布服务器上所有发布的设置。

更改将队列读取器代理连接到发布服务器的上下文

  1. 在“分发服务器属性 - <分发服务器>”对话框的“发布服务器”页上,单击“发布服务器”旁边的属性按钮 (...)。

  2. “到发布服务器的代理连接” 部分,将 “代理连接模式” 选项指定为 “模拟代理进程帐户”“SQL Server 身份验证” 。 如果指定 “SQL Server 身份验证”,还需输入 “登录名”“密码”的值。

  3. 单击 “确定”

    注意

    每个分发数据库都有一个队列读取器代理。 更改代理的安全设置会影响使用此分发数据库的所有发布服务器上所有发布的设置。

更改将队列读取器代理连接到订阅服务器的上下文

  • 对于订阅,队列读取器代理与分发代理使用相同的连接上下文。 有关详细信息,请参阅上述分发代理的过程。

更改立即更新请求订阅的安全设置

  1. 在订阅服务器上的“订阅属性 - <订阅>”对话框中,单击“发布服务器连接行,然后单击行中的属性(...)按钮。

  2. “输入连接信息” 对话框中,请选择下列选项之一:

    • “使用来自链接服务器或远程服务器的登录名”。 如果已使用 sp_addserver (Transact-SQL)sp_addlinkedserver (Transact-SQL)、SQL Server Management Studio 或其他方法在订阅服务器和发布服务器之间定义了远程服务器或链接服务器,请选择此选项。

    • “使用以下登录名和密码进行 SQL Server 身份验证”。 如果尚未在订阅服务器和发布服务器之间定义远程服务器或链接服务器,则选择此选项。 复制将为您创建链接服务器。 所指定的帐户在发布服务器上必须已经存在。

  3. 单击 “确定”

注意

此过程更改复制触发器用于在订阅服务器上发生更改时从订阅服务器连接到发布服务器的方法。 还可以为立即更新订阅更改与分发代理关联的设置。 有关详细信息,请参阅本主题前面介绍的过程。

此过程只适用于请求订阅。 对于推送订阅,请使用存储过程 sp_link_publication (Transact-SQL)

更改从发布服务器到分发服务器的管理连接的密码

  1. 在“分发服务器属性 - <分发服务器>”对话框的“发布服务器”页上,在“密码”和“确认密码”文本框中输入强密码。

  2. 单击“确定”。

  3. 在“发布服务器属性 - <发布服务器>”对话框的“常规”页上,在“密码”和“确认密码”文本框中输入强密码。

  4. 单击“确定”。

“使用 Transact-SQL”

重要

在以下所有过程中,如果可能,请在运行时提示用户输入安全凭据。 如果将凭据存储在脚本文件中,则必须确保文件的安全以防受到未经授权的访问。

在复制服务器上更改存储密码的所有实例

  1. 在复制拓扑中的服务器上,对 master 数据库执行 sp_changereplicationserverpasswords。 指定Microsoft Windows 帐户或Microsoft要更改@login密码的 SQL Server 登录名,以及帐户的新密码或@password登录名。 连接到该拓扑中的其他服务器时,此操作会更改该服务器上所有代理使用的密码的每个实例。

    注意

    若要仅更改与拓扑中特定服务器的连接的登录名和密码(例如分发服务器或订阅服务器),请为此服务器的名称 指定@server

  2. 在复制拓扑中必须更新密码的每台服务器上重复执行步骤 1。

    注意

    更改复制密码后,必须停止并重新启动使用该密码的每个代理,这样代理的更改才能生效。

更改快照代理的安全设置

  1. 在发布服务器上,执行 sp_helppublication_snapshot,指定 @publication。 此操作将返回快照代理的当前安全设置。

  2. 在发布服务器上,执行 sp_changepublication_snapshot,指定要 更改的@publication 和以下一个或多个安全设置:

    • 若要更改代理运行或仅使用此帐户的密码的 Windows 帐户,请指定 @job_login@job_password

    • 若要更改连接到发布服务器时使用的安全模式,请为@publisher_security_mode指定值 10

    • 将连接到发布服务器时使用的安全模式从 1 更改为 0 或更改用于此连接的 SQL Server 登录名时,请指定@publisher_login@publisher_password

    重要

    使用远程分发服务器配置发布服务器时,为所有参数提供的值(包括 job_loginjob_password)都会以纯文本方式发送到该分发服务器。 在执行此存储过程之前,应该对发布服务器及其远程分发服务器之间的连接进行加密。 有关详细信息,请参阅启用数据库引擎的加密连接(SQL Server 配置管理器)

更改日志读取器代理的安全设置

  1. 在发布服务器上,执行 sp_helplogreader_agent,指定 @publisher。 此操作将返回日志读取器代理的当前安全设置。

  2. 在发布服务器上,执行 sp_changelogreader_agent,指定要 更改的 @publication和以下一个或多个安全设置:

    • 若要更改代理运行或仅使用此帐户的密码的 Windows 帐户,请指定 @job_login@job_password

    • 若要更改连接到发布服务器时使用的安全模式,请为@publisher_security_mode指定值 10

    • 将连接到发布服务器时使用的安全模式从 1 更改为 0 或更改用于此连接的 SQL Server 登录名时,请指定@publisher_login@publisher_password

    注意

    更改代理登录名或密码之后,必须先停止并重新启动代理,然后更改才能生效。

    重要

    使用远程分发服务器配置发布服务器时,为所有参数提供的值(包括 job_loginjob_password)都会以纯文本方式发送到该分发服务器。 在执行此存储过程之前,应该对发布服务器及其远程分发服务器之间的连接进行加密。 有关详细信息,请参阅启用数据库引擎的加密连接(SQL Server 配置管理器)

更改推送订阅的分发代理的安全设置

  1. 在发布服务器上,对发布数据库执行 sp_helpsubscription,指定 @publication@subscriber。 此操作将返回订阅属性,包括运行在分发服务器上的分发代理的安全设置。

  2. 在发布服务器上,对发布数据库执行sp_changesubscription,指定@publication@subscriber@subscriber_db、所有@article的值、@property的安全属性的名称以及@value属性的新值。

  3. 对下列每个要更改的安全属性重复步骤 2:

    • 若要更改代理运行所在的 Windows 帐户,或者只更改此帐户的密码,请指定@property的distrib_job_password,并为@value指定新密码。 更改帐户本身时,重复步骤 2,指定@property的distrib_job_login值,并为@value指定新的 Windows 帐户。

    • 若要更改连接到订阅服务器时使用的安全模式,请为@property指定subscriber_security_mode,并为@value指定值 1(Windows 集成身份验证)或 0(SQL Server 身份验证)。

    • 将订阅服务器安全模式更改为 SQL Server 身份验证时,或者更改 SQL Server 身份验证的登录信息时,请为@property指定subscriber_password,并为@value指定新密码 重复步骤 2,指定@property的subscriber_login和@value的新登录名。

    注意

    更改代理登录名或密码之后,必须先停止并重新启动代理,然后更改才能生效。

    重要

    使用远程分发服务器配置发布服务器时,为所有属性(包括 distrib_job_logindistrib_job_password)提供的值都将以纯文本格式发送到分发服务器。 在执行此存储过程之前,应该对发布服务器及其远程分发服务器之间的连接进行加密。 有关详细信息,请参阅启用数据库引擎的加密连接(SQL Server 配置管理器)

更改请求订阅的分发代理的安全设置

  1. 在订阅服务器上,执行 sp_helppullsubscription,指定 @publication。 此操作将返回订阅属性,包括运行在订阅服务器上的分发代理的安全设置。

  2. 在订阅服务器上的订阅服务器上,执行sp_change_subscription_properties,指定@publisher@publisher_db、@publication、@property的安全属性的名称,以及@value属性的新值。

  3. 对下列每个要更改的安全属性重复步骤 2:

    • 若要更改代理运行所在的 Windows 帐户,或者只更改此帐户的密码,请指定@property的distrib_job_password,并为@value指定新密码。 更改帐户本身时,重复步骤 2,指定@property的distrib_job_login值,并为@value指定新的 Windows 帐户。

    • 若要更改连接到分发服务器时使用的安全模式,请为@property指定distributor_security_mode,并为@value指定值 1(Windows 集成身份验证)或 0(SQL Server 身份验证)。

    • 将分发服务器安全模式更改为 SQL Server 身份验证或更改 SQL Server 身份验证的登录信息时,请为@property指定distributor_password,并为@value指定新密码。 重复步骤 2,指定@property的distributor_login和@value的新登录名。

    注意

    更改代理登录名或密码之后,必须先停止并重新启动代理,然后更改才能生效。

更改推送订阅的合并代理的安全设置

  1. 在发布服务器上,对发布数据库执行 sp_helpmergesubscription,指定 @publication@subscriber@subscriber_db。 此操作将返回订阅属性,包括运行在分发服务器上的合并代理的安全设置。

  2. 在发布服务器上,对发布数据库执行sp_changemergesubscription,指定@publication@subscriber、@subscriber_db、@property的安全属性的名称,以及@value属性的新值。

  3. 对下列每个要更改的安全属性重复步骤 2:

    • 若要更改运行代理的 Windows 帐户,或只更改此帐户的密码,请为@property指定merge_job_password,并为@value指定新密码。 更改帐户本身时,重复步骤 2,指定@property的merge_job_login,并为@value指定新的 Windows 帐户

    • 若要更改连接到订阅服务器时使用的安全模式,请为@property指定subscriber_security_mode,并为@value指定值 1(Windows 集成身份验证)或 0(SQL Server 身份验证)。

    • 将订阅服务器安全模式更改为 SQL Server 身份验证时,或者更改 SQL Server 身份验证的登录信息时,请为@property指定subscriber_password,并为@value指定新密码 重复步骤 2,指定@property的subscriber_login和@value的新登录名。

    • 若要更改连接到发布服务器时使用的安全模式,请为@property指定publisher_security_mode,并为@value指定值 1(Windows 集成身份验证)或 0(SQL Server 身份验证)。

    • 将发布服务器安全模式更改为 SQL Server 身份验证时,或者更改 SQL Server 身份验证的登录信息时,请为@property指定publisher_password,并为@value指定新密码。 重复步骤 2,指定@property的publisher_login和@value的新登录名。

    注意

    更改代理登录名或密码之后,必须先停止并重新启动代理,然后更改才能生效。

    重要

    使用远程分发服务器配置发布服务器时,为所有属性(包括 merge_job_loginmerge_job_password)提供的值都将以纯文本格式发送到分发服务器。 在执行此存储过程之前,应该对发布服务器及其远程分发服务器之间的连接进行加密。 有关详细信息,请参阅启用数据库引擎的加密连接(SQL Server 配置管理器)

更改请求订阅的合并代理的安全设置

  1. 在订阅服务器上,执行 sp_helpmergepullsubscription,指定 @publication。 此操作将返回订阅属性,包括运行在订阅服务器上的合并代理的安全设置。

  2. 在订阅服务器上的订阅服务器上,执行sp_change_subscription_properties,指定@publisher@publisher_db、@publication、@property的安全属性的名称,以及@value属性的新值。

  3. 对下列每个要更改的安全属性重复步骤 2:

    • 若要更改代理运行所在的 Windows 帐户,或仅更改此帐户的密码,请为@property指定merge_job_password,并为@value指定新密码。 更改帐户本身时,重复步骤 2,指定@property的merge_job_login,并为@value指定新的 Windows 帐户。

    • 若要更改连接到分发服务器时使用的安全模式,请为@property指定distributor_security_mode,并为@value指定值 1(Windows 集成身份验证)或 0(SQL Server 身份验证)。

    • 将分发服务器安全模式更改为 SQL Server 身份验证或更改 SQL Server 身份验证的登录信息时,请为@property指定distributor_password,并为@value指定新密码。 重复步骤 2,指定@property的distributor_login和@value的新登录名。

    • 若要更改连接到发布服务器时使用的安全模式,请为@property指定publisher_security_mode,并为@value指定值 1(Windows 集成身份验证)或 0(SQL Server 身份验证)。

    • 将发布服务器安全模式更改为 SQL Server 身份验证或更改 SQL Server 身份验证的登录信息时,请为@property指定publisher_password,并为@value指定新密码。 重复步骤 2,指定@property的publisher_login和@value的新登录名。

    注意

    更改代理登录名或密码之后,必须先停止并重新启动代理,然后更改才能生效。

更改快照代理的安全设置以为订阅服务器生成筛选快照

  1. 在发布服务器上,执行 sp_helpdynamicsnapshot_job,指定 @publication。 在结果集中,记下要更改的订阅服务器分区的 job_name 值。

  2. 在发布服务器上,执行sp_changedynamicsnapshot_job,指定@publication,从步骤 1 中获取@dynamic_snapshot_jobname的值,以及代理运行@job_login和@job_password的 Windows 帐户 @job_password的新密码或登录名和密码。

    重要

    使用远程分发服务器配置发布服务器时,为所有参数提供的值(包括 job_loginjob_password)都会以纯文本方式发送到该分发服务器。 在执行此存储过程之前,应该对发布服务器及其远程分发服务器之间的连接进行加密。 有关详细信息,请参阅启用数据库引擎的加密连接(SQL Server 配置管理器)

更改队列读取器代理的安全设置

  1. 在分发服务器上,执行 sp_helpqreader_agent。 此操作将返回队列读取器代理运行时所用的当前 Windows 帐户。

    • 在分发服务器上,执行sp_changeqreader_agent,指定@job_login@job_passwsordWindows 帐户设置。

    注意

    更改代理登录名或密码之后,必须先停止并重新启动代理,然后更改才能生效。 每个分发数据库都有一个队列读取器代理。 更改代理的安全设置会影响使用此分发数据库的所有发布服务器上所有发布的设置。

  2. 对于订阅,队列读取器代理使用与分发代理相同的连接上下文与订阅服务器建立连接。

更改立即更新订阅服务器连接到发布服务器时所用的安全模式

  1. 在订阅服务器上的订阅数据库中,执行 sp_link_publication。 指定@publisher、@publication、用于@publisher_db的发布数据库的名称,并为@security_mode指定以下值之一:

    • 0 ,表示在发布服务器上执行更新时使用 SQL Server 身份验证。 此选项需要为 @login@password指定发布服务器上的一个有效登录名。

    • 1 ,表示连接到发布服务器时使用在订阅服务器上执行更改的用户的安全上下文。 请参阅 sp_link_publication ,了解与此安全模式相关的限制。

    • 2,表示使用现有的、用户定义的链接服务器登录名,该登录名是使用 sp_addlinkedserver (Transact-SQL) 创建的。

更改远程分发服务器的密码

  1. 在分发服务器上的分发服务器上,执行sp_changedistributor_password,为@password指定此登录名的新密码。

    重要

    不要直接更改 distributor_admin 的密码。

  2. 在每个使用此远程分发服务器的发布服务器上,执行 sp_changedistributor_password,指定步骤 1 中用于 @password的密码。

使用复制管理对象 (RMO)

重要

如果可能,请在运行时提示用户输入安全凭据。 如果必须存储凭据,请使用 Microsoft Windows .NET Framework 提供的加密服务

更改存储在复制服务器上的某个密码的所有实例

  1. 使用 ServerConnection 类创建与复制服务器的连接。

  2. 使用步骤 1 中的连接创建 ReplicationServer 类的实例。

  3. 调用 ChangeReplicationServerPasswords 方法。 指定下列参数:

    • security_mode - 一个用于指定身份验证类型的 ReplicationSecurityMode 值,该类型的密码的所有实例都将进行更改。

    • login - 其密码的所有实例都将进行更改的登录名。

    • password - 新的密码值。

      重要

      如果可能,请在运行时提示用户输入安全凭据。 如果必须存储凭据,请使用 Windows .NET Framework 提供的 Cryptographic Services (加密服务)。

      注意

      只有 sysadmin 固定服务器角色的成员才能调用此方法。

  4. 对复制拓扑中需要更新密码的每个服务器重复步骤 1-3。

为事务发布的推送订阅的分发代理更改安全设置

  1. 使用 ServerConnection 类创建与发布服务器的连接。

  2. 创建 TransSubscription 类的一个实例。

  3. 设置订阅的 PublicationNameDatabaseNameSubscriberNameSubscriptionDBName 属性,并为 ConnectionContext 属性设置步骤 1 中的连接。

  4. 调用 LoadProperties 方法获取该对象的属性。 如果此方法返回 false,则说明步骤 3 中的订阅属性没有正确定义或该订阅不存在。

  5. TransSubscription实例设置下列一个或多个安全属性:

  6. (可选)如果已将 CachePropertyChanges 的值指定为 true,则调用 CommitPropertyChanges 方法以在服务器上提交更改。 如果将 CachePropertyChanges 的值指定为 false(默认值),则会将更改立即发送到服务器。

为事务发布的请求订阅的分发代理更改安全设置

  1. 使用 ServerConnection 类创建与订阅服务器的连接。

  2. 创建 TransPullSubscription 类的一个实例。

  3. 设置订阅的 PublicationNameDatabaseNamePublisherNamePublicationDBName 属性,并为 ConnectionContext 属性设置步骤 1 中的连接。

  4. 调用 LoadProperties 方法获取该对象的属性。 如果此方法返回 false,则说明步骤 3 中的订阅属性没有正确定义或该订阅不存在。

  5. TransPullSubscription实例设置下列一个或多个安全属性:

  6. (可选)如果已将 CachePropertyChanges 的值指定为 true,则调用 CommitPropertyChanges 方法以在服务器上提交更改。 如果将 CachePropertyChanges 的值指定为 false(默认值),则会将更改立即发送到服务器。

为合并发布的请求订阅的合并代理更改安全设置

  1. 使用 ServerConnection 类创建与订阅服务器的连接。

  2. 创建 MergePullSubscription 类的一个实例。

  3. 设置订阅的 PublicationNameDatabaseNamePublisherNamePublicationDBName 属性,并为 ConnectionContext 属性设置步骤 1 中的连接。

  4. 调用 LoadProperties 方法获取该对象的属性。 如果此方法返回 false,则说明步骤 3 中的订阅属性没有正确定义或该订阅不存在。

  5. MergePullSubscription实例设置下列一个或多个安全属性:

  6. (可选)如果已将 CachePropertyChanges 的值指定为 true,则调用 CommitPropertyChanges 方法以在服务器上提交更改。 如果将 CachePropertyChanges 的值指定为 false(默认值),则会将更改立即发送到服务器。

为合并发布的推送订阅的合并代理更改安全设置

  1. 使用 ServerConnection 类创建与发布服务器的连接。

  2. 创建 MergeSubscription 类的一个实例。

  3. 设置订阅的 PublicationNameDatabaseNameSubscriberNameSubscriptionDBName 属性,并为 ConnectionContext 属性设置步骤 1 中的连接。

  4. 调用 LoadProperties 方法获取该对象的属性。 如果此方法返回 false,则说明步骤 3 中的订阅属性没有正确定义或该订阅不存在。

  5. MergeSubscription实例设置下列一个或多个安全属性:

  6. (可选)如果已将 CachePropertyChanges 的值指定为 true,则调用 CommitPropertyChanges 方法以在服务器上提交更改。 如果将 CachePropertyChanges 的值指定为 false(默认值),则会将更改立即发送到服务器。

更改即时更新订阅服务器连接到事务发布服务器时使用的登录信息

  1. 使用 ServerConnection 类创建与订阅服务器的连接。

  2. 为订阅数据库创建 ReplicationDatabase 类的实例。 为 Name 指定步骤 1 中的 ServerConnectionConnectionContext

  3. 调用 LoadProperties 方法获取该对象的属性。 如果此方法返回 false,则说明步骤 2 中的数据库属性定义不正确或此订阅数据库不存在。

  4. 调用 LinkPublicationForUpdateableSubscription 方法,传递以下参数:

    • Publisher - 发布服务器的名称。

    • PublisherDB - 发布数据库的名称。

    • Publication - 即时更新订阅服务器所订阅的发布的名称。

    • Distributor - 分发服务器的名称。

    • PublisherSecurity - A PublisherConnectionSecurityContext 对象,用于指定即时更新订阅服务器在连接到发布服务器时使用的安全模式类型和连接的登录凭据。

示例 (RMO)

本示例将检查提供的登录值并为所提供的 Windows 登录名或 SQL Server 登录名(由服务器上的复制存储)更改所有密码。

// Set the Distributor and distribution database names.
string serverName = publisherInstance;

ReplicationServer server;

// Create a connection to the Distributor using Windows Authentication.
ServerConnection conn = new ServerConnection(serverName);

try
{
    // Open the connection. 
    conn.Connect();

    server = new ReplicationServer(conn);

    // Load server properties, if it exists.
    if (server.LoadProperties())
    {
        string[] slash = new string[1];
        slash[1] = @"\";

        // If the login is in the form string\string, assume we are 
        // changing the password for a Windows login.
        if (login.Split(slash, StringSplitOptions.None).Length == 2)
        {
            //Change the password for the all connections that use
            // the Windows login. 
            server.ChangeReplicationServerPasswords(
                    ReplicationSecurityMode.Integrated, login, password);
        }
        else
        {
            // Change the password for the all connections that use
            // the SQL Server login. 
            server.ChangeReplicationServerPasswords(
                    ReplicationSecurityMode.SqlStandard, login, password);
        }
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Properties for {0} could not be retrieved.", publisherInstance));
    }
}
catch (Exception ex)
{
    // Implement the appropriate error handling here. 
    throw new ApplicationException(String.Format(
        "An error occured when changing agent login " +
        " credentials on {0}.",serverName), ex);
}
finally
{
    conn.Disconnect();
}
' Set the Distributor and distribution database names.
Dim serverName As String = publisherInstance

Dim server As ReplicationServer

' Create a connection to the Distributor using Windows Authentication.
Dim conn As ServerConnection = New ServerConnection(serverName)

Try
    ' Open the connection. 
    conn.Connect()

    server = New ReplicationServer(conn)

    ' Load server properties, if it exists.
    If server.LoadProperties() Then

        ' If the login is in the form string\string, assume we are 
        ' changing the password for a Windows login.
        If login.Split("\").Length = 2 Then

            ' Change the password for the all connections that use
            ' the Windows login. 
            server.ChangeReplicationServerPasswords( _
            ReplicationSecurityMode.Integrated, login, password)
        Else

            ' Change the password for the all connections that use
            ' the SQL Server login. 
            server.ChangeReplicationServerPasswords( _
            ReplicationSecurityMode.SqlStandard, login, password)
        End If
    Else
        Throw New ApplicationException(String.Format( _
         "Properties for {0} could not be retrieved.", publisherInstance))
    End If
Catch ex As Exception
    ' Implement the appropriate error handling here. 
    Throw New ApplicationException(String.Format( _
     "An error occured when changing agent login " + _
     " credentials on {0}.", serverName), ex)
Finally
    conn.Disconnect()
End Try

跟进: 修改复制安全设置后

更改代理登录名或密码之后,必须先停止并重新启动代理,然后更改才能生效。

另请参阅

Replication Management Objects Concepts
升级复制脚本(复制 Transact-SQL 编程)
管理复制中的登录名和密码
复制代理安全性模式
复制安全最佳做法
SQL Server 复制安全性
Replication System Stored Procedures Concepts