檢視及修改複寫安全性設定

適用於:SQL ServerAzure SQL 受控執行個體

本主題說明如何使用 SQL Server Management Studio、Transact-SQL 或 Replication Management Objects (RMO),在 SQL Server 中檢視及修改複寫安全性設定。 例如,您可能要將「記錄讀取器代理程式」到「發行者」的連接從 SQL Server 驗證變更為 Windows 整合式驗證,或者在 Windows 帳戶密碼變更後,可能需要變更用來執行代理程式作業的認證。 如需有關各代理程式需要的權限資訊,請參閱< 複寫代理程式安全性模型>。

本主題內容

開始之前

限制事項

  • 您所使用的預存程序,將取決於代理程式的類型和伺服器連接的類型而定。

  • 您所使用的 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 Properties >與< View 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@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 的密碼。

使用 Replication Management Objects (RMO)

重要

可能的話,會在執行階段提示使用者輸入安全性認證。 如果您必須儲存認證,請使用 Microsoft Windows .NET Framework 提供的密碼編譯服務

變更複寫伺服器上儲存的所有密碼執行個體

  1. 使用 ServerConnection 類別建立與複寫伺服器的連接。

  2. 使用步驟 1 中的連接建立 ReplicationServer 類別的執行個體。

  3. 呼叫 ChangeReplicationServerPasswords 方法。 指定下列參數:

    • security_mode - ReplicationSecurityMode 值,可指定變更所有密碼執行個體所針對的驗證類型。

    • login - 變更所有密碼執行個體所針對的登入。

    • password - 新的密碼值。

      重要

      可能的話,會在執行階段提示使用者輸入安全性認證。 如果您必須儲存認證,請使用 Windows .NET Framework 提供的 密碼編譯服務

      注意

      只有 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 並針對 ServerConnection 指定步驟 1 中的 ConnectionContext

  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

後續操作:在您修改複寫安全性設定之後

變更代理程式的登入或密碼之後,您必須先停止並重新啟動代理程式,變更才會生效。

另請參閱

複寫管理物件概念
升級複寫指令碼 (複寫 Transact-SQL 程式設計)
用於複寫的身分識別和存取控制
Replication Agent Security Model
複寫安全性最佳作法
檢視及修改複寫安全性設定
Replication System Stored Procedures Concepts