如何:檢視及修改訂閱和安全性設定 (RMO 程式設計)
在建立發行集與訂閱時,會定義複寫所需的安全性帳戶設定 (登入和密碼)。您可以使用「複寫管理物件」(RMO) 在稍後變更這些設定。您所使用的 RMO 類別和屬性,將取決於代理程式的類型和伺服器連接的類型而定。
安全性注意事項 |
---|
可能的話,系統會在執行階段提示使用者輸入安全性認證。如果您必須儲存認證,請使用 Microsoft Windows .NET Framework 提供的<密碼編譯服務>(英文)。 |
變更複寫伺服器上儲存的所有密碼執行個體
使用 ServerConnection 類別建立與複寫伺服器的連接。
使用步驟 1 中的連接建立 ReplicationServer 類別的執行個體。
呼叫 ChangeReplicationServerPasswords 方法。指定下列參數:
security_mode - ReplicationSecurityMode 值,可指定變更所有密碼執行個體所針對的驗證類型。
login - 變更所有密碼執行個體所針對的登入。
password - 新的密碼值。
安全性注意事項 可能的話,系統會在執行階段提示使用者輸入安全性認證。如果您必須儲存認證,請使用 Windows .NET Framework 提供的<密碼編譯服務>(英文)。
[!附註]
只有 sysadmin 固定伺服器角色的成員,才能呼叫這個方法。
在必須更新密碼的複寫拓撲中,於每一部伺服器上重複步驟 1-3。
針對交易式發行集的發送訂閱變更散發代理程式的安全性設定
使用 ServerConnection 類別建立與發行者的連接。
建立 TransSubscription 類別的執行個體。
針對訂閱設定 PublicationName、DatabaseName、SubscriberName 和 SubscriptionDBName 屬性,並針對 ConnectionContext 屬性設定步驟 1 中的連接。
呼叫 LoadProperties 方法以取得物件的屬性。如果此方法傳回 false,則表示步驟 3 中的訂閱屬性定義不正確,或者此訂閱不存在。
在 TransSubscription 的執行個體上設定以下其中一個或多個安全性屬性:
若要變更代理程式執行所使用之 Windows 帳戶的認證,請設定 SynchronizationAgentProcessSecurity 的 Login 和 Password 欄位。
若要指定「Windows 整合式驗證」當做代理程式連接到訂閱者時所使用的驗證類型,請將 SubscriberSecurity 屬性的 WindowsAuthentication 欄位設定為 true。
若要指定「SQL Server 驗證」當做代理程式連接到訂閱者時所使用的驗證類型,請將 SubscriberSecurity 屬性的 WindowsAuthentication 欄位設定為 false,並針對 SqlStandardLogin 和 SqlStandardPassword 欄位指定訂閱者登入認證。
[!附註]
與散發者的代理程式連接一律使用 SynchronizationAgentProcessSecurity 指定的 Windows 認證來建立。透過 Windows 驗證進行遠端連接時,也會使用這個帳戶。
(選擇性) 如果您已針對 CachePropertyChanges 指定 true 的值,請呼叫 CommitPropertyChanges 方法來認可伺服器上的變更。如果您已針對 CachePropertyChanges 指定 false 的值 (預設值),則會立即將變更傳送到伺服器。
針對交易式發行集的提取訂閱變更散發代理程式的安全性設定
使用 ServerConnection 類別建立與訂閱者的連接。
建立 TransPullSubscription 類別的執行個體。
針對訂閱設定 PublicationName、DatabaseName、PublisherName 和 PublicationDBName 屬性,並針對 ConnectionContext 屬性設定步驟 1 中的連接。
呼叫 LoadProperties 方法以取得物件的屬性。如果此方法傳回 false,則表示步驟 3 中的訂閱屬性定義不正確,或者此訂閱不存在。
在 TransPullSubscription 的執行個體上設定以下其中一個或多個安全性屬性:
若要變更代理程式執行所使用之 Windows 帳戶的認證,請設定 SynchronizationAgentProcessSecurity 的 Login 和 Password 欄位。
若要指定「Windows 整合式驗證」當做代理程式連接到散發者時所使用的驗證類型,請將 DistributorSecurity 屬性的 WindowsAuthentication 欄位設定為 true。
若要指定「SQL Server 驗證」當做代理程式連接到散發者時所使用的驗證類型,請將 DistributorSecurity 屬性的 WindowsAuthentication 欄位設定為 false,並針對 SqlStandardLogin 和 SqlStandardPassword 欄位指定散發者登入認證。
[!附註]
與訂閱者的代理程式連接一律使用 SynchronizationAgentProcessSecurity 指定的 Windows 認證來建立。透過 Windows 驗證進行遠端連接時,也會使用這個帳戶。
(選擇性) 如果您已針對 CachePropertyChanges 指定 true 的值,請呼叫 CommitPropertyChanges 方法來認可伺服器上的變更。如果您已針對 CachePropertyChanges 指定 false 的值 (預設值),則會立即將變更傳送到伺服器。
針對合併式發行集的提取訂閱變更合併代理程式的安全性設定
使用 ServerConnection 類別建立與訂閱者的連接。
建立 MergePullSubscription 類別的執行個體。
針對訂閱設定 PublicationName、DatabaseName、PublisherName 和 PublicationDBName 屬性,並針對 ConnectionContext 屬性設定步驟 1 中的連接。
呼叫 LoadProperties 方法以取得物件的屬性。如果此方法傳回 false,則表示步驟 3 中的訂閱屬性定義不正確,或者此訂閱不存在。
在 MergePullSubscription 的執行個體上設定以下其中一個或多個安全性屬性:
若要變更代理程式執行所使用之 Windows 帳戶的認證,請設定 SynchronizationAgentProcessSecurity 的 Login 和 Password 欄位。
若要指定「Windows 整合式驗證」當做代理程式連接到散發者時所使用的驗證類型,請將 DistributorSecurity 屬性的 WindowsAuthentication 欄位設定為 true。
若要指定「SQL Server 驗證」當做代理程式連接到散發者時所使用的驗證類型,請將 DistributorSecurity 屬性的 WindowsAuthentication 欄位設定為 false,並針對 SqlStandardLogin 和 SqlStandardPassword 欄位指定散發者登入認證。
若要指定「Windows 整合式驗證」當做代理程式連接到發行者時所使用的驗證類型,請將 PublisherSecurity 屬性的 WindowsAuthentication 欄位設定為 true。
若要指定「SQL Server 驗證」當做代理程式連接到發行者時所使用的驗證類型,請將 PublisherSecurity 屬性的 WindowsAuthentication 欄位設定為 false,並針對 SqlStandardLogin 和 SqlStandardPassword 欄位指定發行者登入認證。
[!附註]
與訂閱者的代理程式連接一律使用 SynchronizationAgentProcessSecurity 指定的 Windows 認證來建立。透過 Windows 驗證進行遠端連接時,也會使用這個帳戶。
(選擇性) 如果您已針對 CachePropertyChanges 指定 true 的值,請呼叫 CommitPropertyChanges 方法來認可伺服器上的變更。如果您已針對 CachePropertyChanges 指定 false 的值 (預設值),則會立即將變更傳送到伺服器。
針對合併式發行集的發送訂閱變更合併代理程式的安全性設定
使用 ServerConnection 類別建立與發行者的連接。
建立 MergeSubscription 類別的執行個體。
針對訂閱設定 PublicationName、DatabaseName、SubscriberName 和 SubscriptionDBName 屬性,並針對 ConnectionContext 屬性設定步驟 1 中的連接。
呼叫 LoadProperties 方法以取得物件的屬性。如果此方法傳回 false,則表示步驟 3 中的訂閱屬性定義不正確,或者此訂閱不存在。
在 MergeSubscription 的執行個體上設定以下其中一個或多個安全性屬性:
若要變更代理程式執行所使用之 Windows 帳戶的認證,請設定 SynchronizationAgentProcessSecurity 的 Login 和 Password 欄位。
若要指定「Windows 整合式驗證」當做代理程式連接到訂閱者時所使用的驗證類型,請將 SubscriberSecurity 屬性的 WindowsAuthentication 欄位設定為 true。
若要指定「SQL Server 驗證」當做代理程式連接到訂閱者時所使用的驗證類型,請將 SubscriberSecurity 屬性的 WindowsAuthentication 欄位設定為 false,並針對 SqlStandardLogin 和 SqlStandardPassword 欄位指定訂閱者登入認證。
若要指定「Windows 整合式驗證」當做代理程式連接到發行者時所使用的驗證類型,請將 PublisherSecurity 屬性的 WindowsAuthentication 欄位設定為 true。
若要指定「SQL Server 驗證」當做代理程式連接到發行者時所使用的驗證類型,請將 PublisherSecurity 屬性的 WindowsAuthentication 欄位設定為 false,並針對 SqlStandardLogin 和 SqlStandardPassword 欄位指定發行者登入認證。
[!附註]
與散發者的代理程式連接一律使用 SynchronizationAgentProcessSecurity 指定的 Windows 認證來建立。透過 Windows 驗證進行遠端連接時,也會使用這個帳戶。
(選擇性) 如果您已針對 CachePropertyChanges 指定 true 的值,請呼叫 CommitPropertyChanges 方法來認可伺服器上的變更。如果您已針對 CachePropertyChanges 指定 false 的值 (預設值),則會立即將變更傳送到伺服器。
變更立即更新訂閱者連接到交易式發行者時所用的登入資訊
使用 ServerConnection 類別建立與訂閱者的連接。
為訂閱資料庫建立 ReplicationDatabase 類別的執行個體。指定 Name 並針對 ConnectionContext 指定步驟 1 中的 ServerConnection。
呼叫 LoadProperties 方法以取得物件的屬性。如果此方法傳回 false,則表示步驟 2 中的資料庫屬性定義不正確,或者此訂閱資料庫不存在。
呼叫 LinkPublicationForUpdateableSubscription 方法,傳遞以下參數:
Publisher - 發行者的名稱。
PublisherDB - 發行集資料庫的名稱。
Publication - 立即更新訂閱者訂閱的發行集名稱。
Distributor - 散發者的名稱。
PublisherSecurity - PublisherConnectionSecurityContext 物件,可在連接到發行者和連接的登入認證時,指定立即更新訂閱者所使用之安全性模式的類型。
範例
這個範例會檢查提供的登入值,並針對提供的 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