查看和修改复制安全设置

适用于SQL Server Azure SQL 托管实例

此主题介绍了如何使用 SQL Server Management Studio、Transact-SQL 或复制管理对象 (RMO) 查看和修改 SQL Server 中的复制安全设置。 例如,您可能需要将日志读取器代理到发布服务器的连接从 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。 指定要更改其 @login 密码的 Microsoft Windows 帐户或 Microsoft 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 的值指定为 all,为 @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,为 dynamic_snapshot_jobname 指定在步骤 1 中获取的值,为 @job_password 指定新密码或为 @job_login@job_password 指定 代理运行时所用的 Windows 帐户的登录名和密码。

    重要

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

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

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

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

    注意

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

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

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

  1. 在订阅服务器上的订阅数据库中,执行 sp_link_publication。 指定 @publisher或复制管理对象 (RMO) 在 @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,并为 @password 指定步骤 1 中的密码。

使用复制管理对象 (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. (可选)如果已将 P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges 的值指定为 CachePropertyChanges,则调用 CommitPropertyChanges 方法以在服务器上提交更改。 如果将 false 的值指定为 CachePropertyChanges (默认值),则会将更改立即发送到服务器。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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[0] = @"\";

        // 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 occurred 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 occurred when changing agent login " + _
     " credentials on {0}.", serverName), ex)
Finally
    conn.Disconnect()
End Try

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

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

另请参阅

Replication Management Objects Concepts
升级复制脚本(复制 Transact-SQL 编程)
复制的标识和访问控制
复制代理安全性模式
复制安全最佳做法
查看和修改复制安全设置
Replication System Stored Procedures Concepts