Condividi tramite


Procedura: Visualizzazione e modifica delle impostazioni di protezione delle sottoscrizioni (programmazione RMO)

Le impostazioni degli account di protezione (account di accesso e password) richieste dalla replica vengono definite durante la creazione di pubblicazioni e sottoscrizioni. È possibile modificare queste impostazioni in un secondo momento utilizzando gli oggetti RMO (Replication Management Objects). Le classi e le proprietà RMO utilizzate dipendono dal tipo di agente e dal tipo di connessione al server.

Nota sulla protezioneNota sulla protezione

Se possibile, richiedere agli utenti di immettere le credenziali di protezione in fase di esecuzione. Se è necessario archiviare le credenziali, utilizzare i servizi di crittografia offerti da Microsoft Windows .NET Framework.

Per modificare tutte le istanze di una password archiviate in un server di replica

  1. Creare una connessione al server di replica tramite la classe ServerConnection.

  2. Creare un'istanza della classe ReplicationServer utilizzando la connessione creata nel passaggio 1.

  3. Chiamare il metodo ChangeReplicationServerPasswords. Specificare i parametri seguenti:

    • security_mode: valore ReplicationSecurityMode che specifica il tipo di autenticazione per cui vengono modificate tutte le istanze della password.

    • login: account di accesso per cui vengono modificate tutte le istanze della password.

    • password: nuovo valore della password.

      Nota sulla protezioneNota sulla protezione

      Se possibile, richiedere agli utenti di immettere le credenziali di protezione in fase di esecuzione. Se è necessario archiviare le credenziali, utilizzare i servizi di crittografia offerti da Windows .NET Framework.

      [!NOTA]

      Solo un membro del ruolo predefinito del server sysadmin può chiamare questo metodo.

  4. Ripetere i passaggi da 1 a 3 in ogni server della topologia di replica in cui è necessario aggiornare la password.

Per modificare le impostazioni di protezione dell'agente di distribuzione per una sottoscrizione push in una pubblicazione transazionale

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection.

  2. Creare un'istanza della classe TransSubscription.

  3. Impostare le proprietà PublicationName, DatabaseName, SubscriberName e SubscriptionDBName per la sottoscrizione, quindi impostare la connessione creata nel passaggio 1 per la proprietà ConnectionContext.

  4. Chiamare il metodo LoadProperties per ottenere le proprietà dell'oggetto. Se questo metodo restituisce false, le proprietà della sottoscrizione sono state definite in modo non corretto nel passaggio 3 oppure la sottoscrizione non esiste.

  5. Impostare una o più delle seguenti proprietà di protezione sull'istanza di TransSubscription:

    • Per modificare le credenziali per l'account di Windows utilizzato per eseguire l'agente, impostare i campi Login e Password di SynchronizationAgentProcessSecurity.

    • Per specificare l'autenticazione integrata di Windows come tipo di autenticazione utilizzato dall'agente quando si connette al Sottoscrittore, impostare il campo WindowsAuthentication della proprietà SubscriberSecurity su true.

    • Per specificare l'autenticazione di SQL Server come tipo di autenticazione utilizzato dall'agente quando si connette al Sottoscrittore, impostare il campo WindowsAuthentication della proprietà SubscriberSecurity su falsee specificare le credenziali di accesso al Sottoscrittore per i campi SqlStandardLogin e SqlStandardPassword.

      [!NOTA]

      La connessione dell'agente al server di distribuzione viene sempre eseguita utilizzando le credenziali di Windows specificate da SynchronizationAgentProcessSecurity. Questo account viene utilizzato anche per stabilire connessioni remote tramite l'autenticazione di Windows.

  6. (Facoltativo) Se si specifica un valore true per CachePropertyChanges, chiamare il metodo CommitPropertyChanges per eseguire il commit delle modifiche nel server. Se si specifica un valore false per CachePropertyChanges (impostazione predefinita), le modifiche vengono inviate immediatamente al server.

Per modificare le impostazioni di protezione dell'agente di distribuzione per una sottoscrizione pull in una pubblicazione transazionale

  1. Creare una connessione al Sottoscrittore tramite la classe ServerConnection.

  2. Creare un'istanza della classe TransPullSubscription.

  3. Impostare le proprietà PublicationName, DatabaseName, PublisherName e PublicationDBName per la sottoscrizione, quindi impostare la connessione creata nel passaggio 1 per la proprietà ConnectionContext.

  4. Chiamare il metodo LoadProperties per ottenere le proprietà dell'oggetto. Se questo metodo restituisce false, le proprietà della sottoscrizione sono state definite in modo non corretto nel passaggio 3 oppure la sottoscrizione non esiste.

  5. Impostare una o più delle seguenti proprietà di protezione sull'istanza di TransPullSubscription:

    • Per modificare le credenziali per l'account di Windows utilizzato per eseguire l'agente, impostare i campi Login e Password di SynchronizationAgentProcessSecurity.

    • Per specificare l'autenticazione integrata di Windows come tipo di autenticazione utilizzato dall'agente quando si connette al server di distribuzione, impostare il campo WindowsAuthentication della proprietà DistributorSecurity su true.

    • Per specificare l'autenticazione di SQL Server come tipo di autenticazione utilizzato dall'agente quando si connette al server di distribuzione, impostare il campo WindowsAuthentication della proprietà DistributorSecurity su falsee specificare le credenziali di accesso al server di distribuzione per i campi SqlStandardLogin e SqlStandardPassword.

      [!NOTA]

      La connessione dell'agente al Sottoscrittore viene sempre eseguita utilizzando le credenziali di Windows specificate da SynchronizationAgentProcessSecurity. Questo account viene utilizzato anche per stabilire connessioni remote tramite l'autenticazione di Windows.

  6. (Facoltativo) Se si specifica un valore true per CachePropertyChanges, chiamare il metodo CommitPropertyChanges per eseguire il commit delle modifiche nel server. Se si specifica un valore false per CachePropertyChanges (impostazione predefinita), le modifiche vengono inviate immediatamente al server.

Per modificare le impostazioni di protezione dell'agente di merge per una sottoscrizione pull in una pubblicazione di tipo merge

  1. Creare una connessione al Sottoscrittore tramite la classe ServerConnection.

  2. Creare un'istanza della classe MergePullSubscription.

  3. Impostare le proprietà PublicationName, DatabaseName, PublisherName e PublicationDBName per la sottoscrizione, quindi impostare la connessione creata nel passaggio 1 per la proprietà ConnectionContext.

  4. Chiamare il metodo LoadProperties per ottenere le proprietà dell'oggetto. Se questo metodo restituisce false, le proprietà della sottoscrizione sono state definite in modo non corretto nel passaggio 3 oppure la sottoscrizione non esiste.

  5. Impostare una o più delle seguenti proprietà di protezione sull'istanza di MergePullSubscription:

    • Per modificare le credenziali per l'account di Windows utilizzato per eseguire l'agente, impostare i campi Login e Password di SynchronizationAgentProcessSecurity.

    • Per specificare l'autenticazione integrata di Windows come tipo di autenticazione utilizzato dall'agente quando si connette al server di distribuzione, impostare il campo WindowsAuthentication della proprietà DistributorSecurity su true.

    • Per specificare l'autenticazione di SQL Server come tipo di autenticazione utilizzato dall'agente quando si connette al server di distribuzione, impostare il campo WindowsAuthentication della proprietà DistributorSecurity su falsee specificare le credenziali di accesso al server di distribuzione per i campi SqlStandardLogin e SqlStandardPassword.

    • Per specificare l'autenticazione integrata di Windows come tipo di autenticazione utilizzato dall'agente quando si connette al server di pubblicazione, impostare il campo WindowsAuthentication della proprietà PublisherSecurity su true.

    • Per specificare l'autenticazione di SQL Server come tipo di autenticazione utilizzato dall'agente quando si connette al server di pubblicazione, impostare il campo WindowsAuthentication della proprietà PublisherSecurity su falsee specificare le credenziali di accesso al server di pubblicazione per i campi SqlStandardLogin e SqlStandardPassword.

      [!NOTA]

      La connessione dell'agente al Sottoscrittore viene sempre eseguita utilizzando le credenziali di Windows specificate da SynchronizationAgentProcessSecurity. Questo account viene utilizzato anche per stabilire connessioni remote tramite l'autenticazione di Windows.

  6. (Facoltativo) Se si specifica un valore true per CachePropertyChanges, chiamare il metodo CommitPropertyChanges per eseguire il commit delle modifiche nel server. Se si specifica un valore false per CachePropertyChanges (impostazione predefinita), le modifiche vengono inviate immediatamente al server.

Per modificare le impostazioni di protezione dell'agente di merge per una sottoscrizione push in una pubblicazione di tipo merge

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection.

  2. Creare un'istanza della classe MergeSubscription.

  3. Impostare le proprietà PublicationName, DatabaseName, SubscriberName e SubscriptionDBName per la sottoscrizione, quindi impostare la connessione creata nel passaggio 1 per la proprietà ConnectionContext.

  4. Chiamare il metodo LoadProperties per ottenere le proprietà dell'oggetto. Se questo metodo restituisce false, le proprietà della sottoscrizione sono state definite in modo non corretto nel passaggio 3 oppure la sottoscrizione non esiste.

  5. Impostare una o più delle seguenti proprietà di protezione sull'istanza di MergeSubscription:

    • Per modificare le credenziali per l'account di Windows utilizzato per eseguire l'agente, impostare i campi Login e Password di SynchronizationAgentProcessSecurity.

    • Per specificare l'autenticazione integrata di Windows come tipo di autenticazione utilizzato dall'agente quando si connette al Sottoscrittore, impostare il campo WindowsAuthentication della proprietà SubscriberSecurity su true.

    • Per specificare l'autenticazione di SQL Server come tipo di autenticazione utilizzato dall'agente quando si connette al Sottoscrittore, impostare il campo WindowsAuthentication della proprietà SubscriberSecurity su falsee specificare le credenziali di accesso al Sottoscrittore per i campi SqlStandardLogin e SqlStandardPassword.

    • Per specificare l'autenticazione integrata di Windows come tipo di autenticazione utilizzato dall'agente quando si connette al server di pubblicazione, impostare il campo WindowsAuthentication della proprietà PublisherSecurity su true.

    • Per specificare l'autenticazione di SQL Server come tipo di autenticazione utilizzato dall'agente quando si connette al server di pubblicazione, impostare il campo WindowsAuthentication della proprietà PublisherSecurity su falsee specificare le credenziali di accesso al server di pubblicazione per i campi SqlStandardLogin e SqlStandardPassword.

      [!NOTA]

      La connessione dell'agente al server di distribuzione viene sempre eseguita utilizzando le credenziali di Windows specificate da SynchronizationAgentProcessSecurity. Questo account viene utilizzato anche per stabilire connessioni remote tramite l'autenticazione di Windows.

  6. (Facoltativo) Se si specifica un valore true per CachePropertyChanges, chiamare il metodo CommitPropertyChanges per eseguire il commit delle modifiche nel server. Se si specifica un valore false per CachePropertyChanges (impostazione predefinita), le modifiche vengono inviate immediatamente al server.

Per modificare le informazioni di accesso utilizzate da un Sottoscrittore ad aggiornamento immediato quando si connette al server di pubblicazione transazionale

  1. Creare una connessione al Sottoscrittore tramite la classe ServerConnection.

  2. Creare un'istanza della classe ReplicationDatabase per il database di sottoscrizione. Specificare Name e ServerConnection dal passaggio 1 per ConnectionContext.

  3. Chiamare il metodo LoadProperties per ottenere le proprietà dell'oggetto. Se questo metodo restituisce false, le proprietà del database sono state definite in modo non corretto nel passaggio 2 oppure il database di sottoscrizione non esiste.

  4. Chiamare il metodo LinkPublicationForUpdateableSubscription, passando i parametri seguenti:

    • Publisher: nome del server di pubblicazione.

    • PublisherDB: nome del database di pubblicazione.

    • Publication: nome della pubblicazione sottoscritta dal Sottoscrittore ad aggiornamento immediato.

    • Distributor: nome del server di distribuzione.

    • PublisherSecurity: oggetto PublisherConnectionSecurityContext che specifica il tipo di modalità di protezione utilizzato dal Sottoscrittore ad aggiornamento immediato quando si connette al server di pubblicazione e le credenziali di accesso per la connessione.

Esempio

In questo esempio viene controllato il valore di accesso fornito e vengono modificate tutte le password per l'account di accesso di Windows o di SQL Server specificato archiviate dalla replica nel 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