檢視並修改複寫安全設定

適用於: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. 選取 OK。

變更快照集代理程式的安全性設定

  1. 代理程式安全性 頁面的 發行屬性 - <發行 對話方塊中,按一下 快照代理程式 文字方塊旁的 安全性設定 按鈕。

  2. [快照集代理程式安全性] 對話方塊中,指定代理程式執行時所使用的帳戶:

    • [代理程式帳戶] 文字方塊中輸入新的 Windows 帳戶。

    • [密碼][確認密碼] 文字方塊中輸入新的增強式密碼。

  3. 指定代理程式應在何種情況下從 Distributor 連線到 Publisher。 若您選取 [使用下列的 SQL Server 登入] ,必須同時指定登入:

    • [登入] 文字方塊中輸入登入。

    • [密碼][確認密碼] 文字方塊中輸入新的增強式密碼。

    注意

    若發行者是 Oracle 發行者,則連接內容指定於 [散發者屬性 - <散發者>] 對話方塊中。 請參閱下面用於變更內容的程序。

  4. 選取 OK。

變更記錄讀取器代理程式的安全性設定

  1. 代理程式安全性 頁面上的 發行屬性 - <發行 對話方塊中,按一下 記錄讀取器代理程式 文字方塊旁的 安全性設定 按鈕。

  2. [記錄讀取器代理程式安全性] 對話方塊中,指定代理程式執行時所使用的帳戶:

    • [代理程式帳戶] 文字方塊中輸入新的 Windows 帳戶。

    • [密碼][確認密碼] 文字方塊中輸入新的增強式密碼。

  3. 指定代理程式應在何種情況下從 Distributor 連線到 Publisher。 若您選取 [使用下列的 SQL Server 登入] ,必須同時指定登入:

    • [登入] 文字方塊中輸入登入。

    • [密碼][確認密碼] 文字方塊中輸入新的增強式密碼。

    注意

    若發行者是 Oracle 發行者,則連接內容指定於 [散發者屬性 - <散發者>] 對話方塊中。 使用下一個程序變更內容。

  4. 選取 OK。

    注意

    每個已發行的資料庫都有一個「記錄讀取器代理程式」。 在一個發行集上變更代理程式的安全性設定會影響該發行集資料庫中所有發行集的設定。

若要變更 Oracle 發行的快照代理程式與記錄讀取器代理程式連線到發行者時所使用的內容

  1. 在 散發者屬性 - <散發者> 對話方塊的 發行者 頁面上,按一下發行者旁邊的內容按鈕 (...)。

  2. Agent Connection to the Publisher 區段中,指定您所設定之複寫管理使用者結構描述所使用的登入名稱與密碼。 如需詳細資訊,請參閱設定 Oracle 發行者

  3. 選取 OK。

變更推送訂閱之散發代理程式的安全性設定

  1. 在發行者端的 [訂閱屬性 - <訂閱>] 對話方塊中,可做下列變更:

    • 若要變更散發代理程式執行和連接到散發者時所使用的帳戶,請按一下 [代理程式處理帳戶] 資料列,然後按一下資料列中的屬性 ( ... ) 按鈕。 在 [散發代理程式安全性] 對話方塊中指定帳戶和密碼。

    • 若要變更散發代理程式連線到訂閱者時所依據的內容,請按一下 Subscriber Connection 資料列,然後按一下該資料列中的屬性 (...) 按鈕。 在 [輸入連接資訊] 對話方塊中指定內容。

      若您使用佇列式更新訂閱,佇列讀取器代理程式在連線到訂閱者時,也會使用此處指定的設定。

  2. 選取 OK。

變更提取式訂閱之散發代理程式安全性設定

  1. 在訂閱者端的 [訂閱屬性 - <訂閱>] 對話方塊中,可做下列變更:

    • 若要變更散發代理程式執行和連接到訂閱者時所使用的帳戶,請按一下 [代理程式處理帳戶] 資料列,然後按一下資料列中的屬性 ( ... ) 按鈕。 在 [散發代理程式安全性] 對話方塊中指定帳戶和密碼。

      若您使用佇列式更新訂閱,佇列讀取器代理程式在連線到訂閱者時,也會使用此處指定的設定。

    • 若要變更散發代理程式連線到散發者時所使用的設定內容,請按一下 散發者連線 資料列,然後按一下該資料列中的 [屬性] (...) 按鈕。 在 [輸入連接資訊] 對話方塊中指定內容。

  2. 選取 OK。

變更發送訂閱之合併代理程式的安全性設定

  1. 在發行者端的 [訂閱屬性 - <訂閱>] 對話方塊中,可做下列變更:

    • 若要變更合併代理程式執行和連接到發行者與散發者時所使用的帳戶,請按一下 [代理程式處理帳戶] 資料列,然後按一下資料列中的屬性 ( ... ) 按鈕。 在 [合併代理程式安全性] 對話方塊中指定帳戶和密碼。

    • 若要變更合併代理程式連線到訂閱者時所使用的內容,請按一下 訂閱者連線 這一列,然後按一下該列中的屬性 (...) 按鈕。 在 [輸入連接資訊] 對話方塊中指定內容。

  2. 選取 OK。

變更提取式訂閱的合併代理程式安全性設定

  1. 在訂閱者端的 [訂閱屬性 - <訂閱>] 對話方塊中,可做下列變更:

    • 若要變更合併代理程式執行和連接到訂閱者時所使用的帳戶,請按一下 [代理程式處理帳戶] 資料列,然後按一下資料列中的屬性 ( ... ) 按鈕。 在 [合併代理程式安全性] 對話方塊中指定帳戶和密碼。

    • 若要變更合併代理程式連線至發行者與散發者時所使用的內容,請按一下 發行者連線 資料列,然後按一下該資料列中的屬性 (...) 按鈕。 在 [輸入連接資訊] 對話方塊中指定內容。

  2. 選取 OK。

若要變更佇列讀取器代理程式執行時所使用的帳戶

  1. 在 散發者屬性 - <散發者> 對話方塊的 一般 頁面上,按一下散發資料庫旁的屬性 (...) 按鈕。

  2. 在 [發佈資料庫屬性 - <資料庫>] 對話方塊中,按一下 [代理程式處理序帳戶] 文字方塊旁的 [安全性設定] 按鈕。

  3. [佇列讀取器代理程式安全性] 對話方塊中,指定代理程式執行和連接到「散發者」時所使用的帳戶:

    • [處理帳戶] 文字方塊中輸入新的 Windows 帳戶。

    • [密碼][確認密碼] 文字方塊中輸入新的增強式密碼。

  4. 選取 OK。

    注意

    每個散發資料庫各有一個佇列讀取器代理程式。 變更此代理程式的安全性設定時,會影響使用此散發資料庫之所有發行者上的所有發行集設定。

若要變更佇列讀取器代理程式連接到發行者所使用的內容

  1. 在 散發者屬性 - <散發者> 對話方塊的 發行者 頁面上,按一下發行者旁邊的屬性按鈕 (...)。

  2. [代理程式至發行者的連接 ] 區段,指定 [代理程式連接模式] 選項中 [模擬代理程式處理帳戶][SQL Server 驗證] 的值。 如果指定 [SQL Server 驗證] ,還要輸入 [登入][密碼] 的值。

  3. 選取 OK。

    注意

    每個散發資料庫各有一個佇列讀取器代理程式。 變更此代理程式的安全性設定時,會影響使用此散發資料庫之所有發行者上的所有發行集設定。

若要變更佇列讀取器代理程式連接到訂閱者所使用的內容

  • 「佇列讀取器代理程式」使用與「散發代理程式」相同的連接內容進行訂閱。 如需詳細資訊,請參閱「散發代理程式」的上述程序。

若要變更立即更新式提取訂閱的安全性設定

  1. 在訂閱者端的 [訂閱屬性 - <訂閱>] 對話方塊中,按一下 [發行者連線] 列,然後按一下該列中的屬性 (…) 按鈕。

  2. [輸入連接資訊] 對話方塊中,選取下列其中一個選項:

    • [使用連結伺服器或遠端伺服器的登入] 。 若您已透過 sp_addserver (Transact-SQL)sp_addlinkedserver (Transact-SQL)、SQL Server Management Studio 或其他方法定義遠端伺服器或訂閱者與發行者之間連結的伺服器,請選取此選項。

    • [利用下列登入和密碼來使用 SQL Server 驗證] 。 如果您尚未在訂閱者與發行者之間定義遠端伺服器或連結伺服器,請選取此選項。 複寫將為您建立連結的伺服器。 您指定的帳戶必須已經存在於發行者端。

  3. 選取 OK。

注意

此程序會變更複寫觸發程序在「訂閱者」端發生變更時,用來從「訂閱者」連接到「發行者」的方法。 您也可以變更與立即更新訂閱相關的散發代理程式設定。 如需詳細資訊,請參閱本主題前文中的程序。

此程序僅適用於提取訂閱。 對於推送訂閱,請使用預存程序 sp_link_publication (Transact-SQL)

變更發行者到散發者之間管理連線的密碼

  1. 在 散發者屬性 - <散發者 對話方塊的 發行者 頁面上,在 密碼 和 確認密碼 文字方塊中輸入高強度密碼。

  2. 選取 OK。

  3. 在 [發行者屬性 - 發行者<] 對話方塊的 [一般] 頁面上,於 [密碼] 與 [確認密碼] 文字方塊中輸入強式密碼。

  4. 選取 OK。

使用 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,針對 all 指定 @article 值、針對 @property 指定安全屬性的名稱,以及針對 @value 指定此屬性的新值。

  3. 針對以下變更的每一個安全性屬性重複步驟 2:

    • 若要變更代理程式執行時所用的 Windows 帳戶,或只要變更此帳戶的密碼,請針對 指定 @property 的值,並針對 @value 指定新的密碼。 當變更帳戶本身時,請重複步驟 2,為 @property 指定值 distrib_job_login,並為 @value 指定新的 Windows 帳戶。

    • 若要變更在連接到訂閱者時所用的安全性模式,請針對 指定 @property 的值,並針對 指定 1 (Windows 整合式驗證) 或 @value (SQL Server 驗證)。

    • 將訂閱者所用的安全性模式變更為 SQL Server 驗證,或變更 SQL Server 驗證的登入資訊時,請針對 指定 @property 的值,並針對 @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 的值,並針對 @value 指定新的密碼。 當變更帳戶本身時,請重複步驟 2,為 @property 指定值 distrib_job_login,並為 @value 指定新的 Windows 帳戶。

    • 若要變更在連接到散發者時所用的安全性模式,請針對 指定 @property 的值,並針對 指定 1 (Windows 整合式驗證) 或 @value (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 的值,並針對 指定 1 (Windows 整合式驗證) 或 @value (SQL Server 驗證)。

    • 將訂閱者所用的安全性模式變更為 SQL Server 驗證,或變更 SQL Server 驗證的登入資訊時,請針對 指定 @property 的值,並針對 @value 指定新的密碼。 重複步驟 2,為 @property 指定值 subscriber_login,並為 @value 指定新的登入名稱。

    • 若要變更在連接到發行者時所用的安全性模式,請針對 指定 @property 的值,並針對 指定 1 (Windows 整合式驗證) 或@value (SQL Server 驗證) 的值。

    • 將發行者所用的安全性模式變更為 SQL Server 驗證,或變更 SQL Server 驗證的登入資訊時,請針對 指定 @property 的值,並針對 @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 的值,並針對 指定 1 (Windows 整合式驗證) 或 @value (SQL Server 驗證) 的值。

    • 將散發者安全性模式變更為 SQL Server 驗證,或變更 SQL Server 驗證的登入資訊時,請為 @property 指定 distributor_password 的值,並為 @value 指定新密碼。 重複步驟 2,為 @property 指定值 distributor_login,並為 @value 指定新的登入名稱。

    • 若要變更在連接到發行者時所用的安全性模式,請針對 指定 @property 的值,並針對 指定 1 (Windows 整合式驗證) 或@value (SQL Server 驗證) 的值。

    • 將發行者所用的安全性模式變更為 SQL Server 驗證,或變更 SQL Server 驗證的登入資訊時,請針對 指定 @property 的值,並針對 @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 在 Publisher 端指定有效的登入帳號。

    • 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 提供的 密碼編譯服務

      注意

      只有 sysadmin 固定伺服器角色的成員,才能呼叫這個方法。

  4. 在必須更新密碼的複寫拓撲中,於每一部伺服器上重複步驟 1-3。

針對交易式發行集的發送訂閱變更散發代理程式的安全性設定

  1. 使用 ServerConnection 類別建立與發行者的連接。

  2. 建立 TransSubscription 類別的執行個體。

  3. 針對訂閱設定 PublicationNameDatabaseNameSubscriberNameSubscriptionDBName 屬性,並針對 ConnectionContext 屬性設定步驟 1 中的連接。

  4. 呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳回 false,則表示步驟 3 中的訂閱屬性定義不正確,或者此訂閱不存在。

  5. TransSubscription的執行個體上設定以下其中一個或多個安全性屬性:

  6. (選擇性) 如果您為 CachePropertyChanges 指定了 true,請呼叫 CommitPropertyChanges 方法,以認可伺服器上的變更。 如果您已針對 false 指定 CachePropertyChanges 的值 (預設值),則會立即將變更傳送到伺服器。

針對交易式發行集的提取訂閱變更散發代理程式的安全性設定

  1. 使用 ServerConnection 類別建立與「訂閱者」的連接。

  2. 建立 TransPullSubscription 類別的執行個體。

  3. 針對訂閱設定 PublicationNameDatabaseNamePublisherNamePublicationDBName 屬性,並針對 ConnectionContext 屬性設定步驟 1 中的連接。

  4. 呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳回 false,則表示步驟 3 中的訂閱屬性定義不正確,或者此訂閱不存在。

  5. TransPullSubscription的執行個體上設定以下其中一個或多個安全性屬性:

  6. (選擇性) 如果您為 CachePropertyChanges 指定了 true,請呼叫 CommitPropertyChanges 方法,以認可伺服器上的變更。 如果您已針對 false 指定 CachePropertyChanges 的值 (預設值),則會立即將變更傳送到伺服器。

針對合併式發行集的提取訂閱變更合併代理程式的安全性設定

  1. 使用 ServerConnection 類別建立與「訂閱者」的連接。

  2. 建立 MergePullSubscription 類別的執行個體。

  3. 針對訂閱設定 PublicationNameDatabaseNamePublisherNamePublicationDBName 屬性,並針對 ConnectionContext 屬性設定步驟 1 中的連接。

  4. 呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳回 false,則表示步驟 3 中的訂閱屬性定義不正確,或者此訂閱不存在。

  5. MergePullSubscription的執行個體上設定以下其中一個或多個安全性屬性:

  6. (選擇性) 如果您為 CachePropertyChanges 指定了 true,請呼叫 CommitPropertyChanges 方法,以認可伺服器上的變更。 如果您已針對 false 指定 CachePropertyChanges 的值 (預設值),則會立即將變更傳送到伺服器。

針對合併式發行集的發送訂閱變更合併代理程式的安全性設定

  1. 使用 ServerConnection 類別建立與發行者的連接。

  2. 建立 MergeSubscription 類別的執行個體。

  3. 針對訂閱設定 PublicationNameDatabaseNameSubscriberNameSubscriptionDBName 屬性,並針對 ConnectionContext 屬性設定步驟 1 中的連接。

  4. 呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳回 false,則表示步驟 3 中的訂閱屬性定義不正確,或者此訂閱不存在。

  5. MergeSubscription的執行個體上設定以下其中一個或多個安全性屬性:

  6. (選擇性) 如果您為 CachePropertyChanges 指定了 true,請呼叫 CommitPropertyChanges 方法,以認可伺服器上的變更。 如果您已針對 false 指定 CachePropertyChanges 的值 (預設值),則會立即將變更傳送到伺服器。

變更立即更新訂閱者連線到交易式發行者時所使用的登入資訊

  1. 使用 ServerConnection 類別建立與「訂閱者」的連接。

  2. 為訂閱資料庫建立 ReplicationDatabase 類別的執行個體。 為 ConnectionContext 指定 Name 以及步驟 1 中的 ServerConnection

  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[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

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

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