Share via


查看和修改复制安全设置

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

本主题内容

  • 开始之前:

    限制和局限

    安全性

  • 查看和修改复制安全设置,使用:

    SQL Server Management Studio

    Transact-SQL

    复制管理对象 (RMO)

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

开始之前

限制和局限

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

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

安全性

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

权限

用于“返回首页”链接的箭头图标[Top]

使用 SQL Server Management Studio

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

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

  2. **“发布属性 - <发布>”对话框的“代理安全性”**页。 有关访问此对话框的详细信息,请参阅查看和修改发布属性

  3. **“订阅属性 - <订阅>”**对话框。 有关访问此对话框的详细信息,请参阅查看和修改推送订阅属性查看和修改请求订阅属性

  4. **“分发服务器属性 - <分发服务器>”“分发数据库属性 - <数据库>”**对话框。 有关访问这些对话框的详细信息,请参阅查看和修改分发服务器和发布服务器属性

  5. **“发布服务器属性 - <发布服务器>”**对话框。 有关访问此对话框的详细信息,请参阅查看和修改分发服务器和发布服务器属性

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

  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. 单击“确定”。

用于“返回首页”链接的箭头图标[Top]

使用 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_login 和 job_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_login 和 job_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_login 和 job_password)都会以纯文本方式发送到该分发服务器。 在执行此存储过程之前,应该对发布服务器及其远程分发服务器之间的连接进行加密。 有关详细信息,请参阅启用数据库引擎的加密连接(SQL Server 配置管理器)

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

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

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

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

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

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

  • 在订阅服务器上的订阅数据库中,执行 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,并为 @password 指定步骤 1 中的密码。

用于“返回首页”链接的箭头图标[Top]

使用复制管理对象 (RMO)

安全说明安全说明

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

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

  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 类的实例。 为 ConnectionContext 指定步骤 1 中的 NameServerConnection

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

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

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

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

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

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

    • PublisherSecurity - 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

用于“返回首页”链接的箭头图标[Top]

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

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

用于“返回首页”链接的箭头图标[Top]

请参阅

任务

升级复制脚本(复制 Transact-SQL 编程)

概念

复制管理对象概念

复制代理安全性模式

复制安全最佳实践

复制系统存储过程概念

其他资源

管理复制中的登录名和密码

安全性和保护(复制)