Share via


Vorgehensweise: Anzeigen und Ändern der Sicherheitseinstellungen von Abonnements (RMO-Programmierung)

Die Einstellungen für das Sicherheitskonto (Anmeldenamen und Kennwörter), die für die Replikation erforderlich sind, werden bei der Erstellung von Veröffentlichungen und Abonnements definiert. Sie können diese Einstellungen später mithilfe von Replikationsverwaltungsobjekten (RMO) ändern. Welche RMO-Klassen und -Eigenschaften verwendet werden, hängt vom Agenttyp und vom Typ der Serververbindung ab.

SicherheitshinweisSicherheitshinweis

Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit einzugeben. Wenn Sie Anmeldeinformationen speichern müssen, verwenden Sie die Kryptografiedienste von Microsoft Windows .NET Framework.

So ändern Sie alle Instanzen eines auf einem Replikationsserver gespeicherten Kennworts

  1. Erstellen Sie mithilfe der ServerConnection-Klasse eine Verbindung mit dem Replikationsserver.

  2. Erstellen Sie eine Instanz der ReplicationServer-Klasse, und verwenden Sie hierzu die Verbindung aus Schritt 1.

  3. Rufen Sie die ChangeReplicationServerPasswords-Methode auf. Geben Sie die folgenden Parameter an:

    • security_mode – Ein ReplicationSecurityMode-Wert, der den Typ der Authentifizierung angibt, für die alle Instanzen des Kennworts geändert werden.

    • login – Die Anmeldung, für die alle Instanzen des Kennworts geändert werden.

    • password – Der neue Kennwortwert.

      SicherheitshinweisSicherheitshinweis

      Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit einzugeben. Wenn Sie Anmeldeinformationen speichern müssen, verwenden Sie die Kryptografiedienste von Microsoft Windows .NET Framework.

      HinweisHinweis

      Nur ein Mitglied der festen Serverrolle sysadmin kann diese Methode aufrufen.

  4. Wiederholen Sie Schritte 1 bis 3 für jeden Server in der Replikationstopologie, in der das Kennwort aktualisiert werden muss.

So ändern Sie die Sicherheitseinstellungen für den Verteilungs-Agent für ein Pushabonnement einer Transaktionsveröffentlichung

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection-Klasse verwenden.

  2. Erstellen Sie eine Instanz der TransSubscription-Klasse.

  3. Legen Sie die Eigenschaften PublicationName, DatabaseName, SubscriberName und SubscriptionDBName für das Abonnement fest, und legen Sie die Verbindung aus Schritt 1 für die ConnectionContext-Eigenschaft fest.

  4. Rufen Sie die LoadProperties-Methode auf, um die Eigenschaften des Objekts abzurufen. Wenn diese Methode false zurückgibt, wurden entweder die Abonnementeigenschaften in Schritt 3 falsch definiert, oder das Abonnement ist nicht vorhanden.

  5. Legen Sie eine oder mehrere der folgenden Sicherheitseigenschaften für die Instanz von TransSubscription fest:

    • Um die Anmeldeinformationen für das Windows-Konto zu ändern, unter dem der Agent ausgeführt wird, legen Sie das Login-Feld und das Password-Feld von SynchronizationAgentProcessSecurity fest.

    • Zur Angabe der integrierten Windows-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Abonnenten verwendet wird, legen Sie das WindowsAuthentication-Feld der SubscriberSecurity-Eigenschaft auf true fest.

    • Zur Angabe der integrierten SQL Server-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Abonnenten verwendet wird, legen Sie das WindowsAuthentication-Feld der SubscriberSecurity-Eigenschaft auf true fest, und geben Sie die Anmeldeinformationen des Abonnenten in den Feldern SqlStandardLogin und SqlStandardPassword an.

      HinweisHinweis

      Die Agent-Verbindung zum Verteiler wird immer mit den durch SynchronizationAgentProcessSecurity angegebenen Windows-Anmeldeinformationen hergestellt. Dieses Konto wird auch verwendet, um Remoteverbindungen unter Verwendung der Windows-Authentifizierung herzustellen.

  6. (Optional) Wenn Sie den Wert true für CachePropertyChanges angegeben haben, rufen Sie die CommitPropertyChanges-Methode auf, um die Änderungen auf dem Server einzutragen. Wenn Sie den Wert false für CachePropertyChanges (die Standardeinstellung) angegeben haben, werden die Änderungen sofort an den Server gesendet.

So ändern Sie die Sicherheitseinstellungen für den Verteilungs-Agent für ein Pullabonnement einer Transaktionsveröffentlichung

  1. Erstellen Sie eine Verbindung mit dem Abonnenten, indem Sie die ServerConnection-Klasse verwenden.

  2. Erstellen Sie eine Instanz der TransPullSubscription-Klasse.

  3. Legen Sie die PublicationName, DatabaseName, PublisherName-Eigenschaft und die PublicationDBName-Eigenschaft für das Abonnement fest, und legen Sie die Verbindung aus Schritt 1 für die ConnectionContext-Eigenschaft fest.

  4. Rufen Sie die LoadProperties-Methode auf, um die Eigenschaften des Objekts abzurufen. Wenn diese Methode false zurückgibt, wurden entweder die Abonnementeigenschaften in Schritt 3 falsch definiert, oder das Abonnement ist nicht vorhanden.

  5. Legen Sie eine oder mehrere der folgenden Sicherheitseigenschaften für die Instanz von TransPullSubscription fest:

    • Um die Anmeldeinformationen für das Windows-Konto zu ändern, unter dem der Agent ausgeführt wird, legen Sie das Login-Feld und das Password-Feld von SynchronizationAgentProcessSecurity fest.

    • Zur Angabe der integrierten Windows-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Verteiler verwendet wird, legen Sie das WindowsAuthentication-Feld der DistributorSecurity-Eigenschaft auf true fest.

    • Zur Angabe der SQL Server-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Verteiler verwendet wird, legen Sie das WindowsAuthentication-Feld der DistributorSecurity-Eigenschaft auf falsefest, und geben Sie die Anmeldeinformationen des Verteilers in den Feldern SqlStandardLogin und SqlStandardPassword an.

      HinweisHinweis

      Die Agent-Verbindung zum Abonnenten wird immer mit den durch SynchronizationAgentProcessSecurity angegebenen Windows-Anmeldeinformationen hergestellt. Dieses Konto wird auch verwendet, um Remoteverbindungen unter Verwendung der Windows-Authentifizierung herzustellen.

  6. (Optional) Wenn Sie den Wert true für CachePropertyChanges angegeben haben, rufen Sie die CommitPropertyChanges-Methode auf, um die Änderungen auf dem Server einzutragen. Wenn Sie den Wert false für CachePropertyChanges (die Standardeinstellung) angegeben haben, werden die Änderungen sofort an den Server gesendet.

So ändern Sie die Sicherheitseinstellungen für den Merge-Agent für ein Pullabonnement einer Mergeveröffentlichung

  1. Erstellen Sie eine Verbindung mit dem Abonnenten, indem Sie die ServerConnection-Klasse verwenden.

  2. Erstellen Sie eine Instanz der MergePullSubscription-Klasse.

  3. Legen Sie die PublicationName, DatabaseName, PublisherName-Eigenschaft und die PublicationDBName-Eigenschaft für das Abonnement fest, und legen Sie die Verbindung aus Schritt 1 für die ConnectionContext-Eigenschaft fest.

  4. Rufen Sie die LoadProperties-Methode auf, um die Eigenschaften des Objekts abzurufen. Wenn diese Methode false zurückgibt, wurden entweder die Abonnementeigenschaften in Schritt 3 falsch definiert, oder das Abonnement ist nicht vorhanden.

  5. Legen Sie eine oder mehrere der folgenden Sicherheitseigenschaften für die Instanz von MergePullSubscription fest:

    • Um die Anmeldeinformationen für das Windows-Konto zu ändern, unter dem der Agent ausgeführt wird, legen Sie das Login-Feld und das Password-Feld von SynchronizationAgentProcessSecurity fest.

    • Zur Angabe der integrierten Windows-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Verteiler verwendet wird, legen Sie das WindowsAuthentication-Feld der DistributorSecurity-Eigenschaft auf true fest.

    • Zur Angabe der SQL Server-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Verteiler verwendet wird, legen Sie das WindowsAuthentication-Feld der DistributorSecurity-Eigenschaft auf falsefest, und geben Sie die Anmeldeinformationen des Verteilers in den Feldern SqlStandardLogin und SqlStandardPassword an.

    • Zur Angabe der integrierten Windows-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Verleger verwendet wird, legen Sie das WindowsAuthentication-Feld der PublisherSecurity-Eigenschaft auf true fest.

    • Zur Angabe der integrierten SQL Server-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Verleger verwendet wird, legen Sie das WindowsAuthentication-Feld der SubscriberSecurity-Eigenschaft auf true fest, und geben Sie die Anmeldeinformationen des Verlegers in den Feldern SqlStandardLogin und SqlStandardPassword an.

      HinweisHinweis

      Die Agent-Verbindung zum Abonnenten wird immer mit den durch SynchronizationAgentProcessSecurity angegebenen Windows-Anmeldeinformationen hergestellt. Dieses Konto wird auch verwendet, um Remoteverbindungen unter Verwendung der Windows-Authentifizierung herzustellen.

  6. (Optional) Wenn Sie den Wert true für CachePropertyChanges angegeben haben, rufen Sie die CommitPropertyChanges-Methode auf, um die Änderungen auf dem Server einzutragen. Wenn Sie den Wert false für CachePropertyChanges (die Standardeinstellung) angegeben haben, werden die Änderungen sofort an den Server gesendet.

So ändern Sie die Sicherheitseinstellungen für den Merge-Agent für ein Pushabonnement einer Mergeveröffentlichung

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection-Klasse verwenden.

  2. Erstellen Sie eine Instanz der MergeSubscription-Klasse.

  3. Legen Sie die Eigenschaften PublicationName, DatabaseName, SubscriberName und SubscriptionDBName für das Abonnement fest, und legen Sie die Verbindung aus Schritt 1 für die ConnectionContext-Eigenschaft fest.

  4. Rufen Sie die LoadProperties-Methode auf, um die Eigenschaften des Objekts abzurufen. Wenn diese Methode false zurückgibt, wurden entweder die Abonnementeigenschaften in Schritt 3 falsch definiert, oder das Abonnement ist nicht vorhanden.

  5. Legen Sie eine oder mehrere der folgenden Sicherheitseigenschaften für die Instanz von MergeSubscription fest:

    • Um die Anmeldeinformationen für das Windows-Konto zu ändern, unter dem der Agent ausgeführt wird, legen Sie das Login-Feld und das Password-Feld von SynchronizationAgentProcessSecurity fest.

    • Zur Angabe der integrierten Windows-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Abonnenten verwendet wird, legen Sie das WindowsAuthentication-Feld der SubscriberSecurity-Eigenschaft auf true fest.

    • Zur Angabe der integrierten SQL Server-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Abonnenten verwendet wird, legen Sie das WindowsAuthentication-Feld der SubscriberSecurity-Eigenschaft auf true fest, und geben Sie die Anmeldeinformationen des Abonnenten in den Feldern SqlStandardLogin und SqlStandardPassword an.

    • Zur Angabe der integrierten Windows-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Verleger verwendet wird, legen Sie das WindowsAuthentication-Feld der PublisherSecurity-Eigenschaft auf true fest.

    • Zur Angabe der integrierten SQL Server-Authentifizierung als Authentifizierungstyp, der vom Agent zum Verbindungsaufbau mit dem Verleger verwendet wird, legen Sie das WindowsAuthentication-Feld der SubscriberSecurity-Eigenschaft auf true fest, und geben Sie die Anmeldeinformationen des Verlegers in den Feldern SqlStandardLogin und SqlStandardPassword an.

      HinweisHinweis

      Die Agent-Verbindung zum Verteiler wird immer mit den durch SynchronizationAgentProcessSecurity angegebenen Windows-Anmeldeinformationen hergestellt. Dieses Konto wird auch verwendet, um Remoteverbindungen unter Verwendung der Windows-Authentifizierung herzustellen.

  6. (Optional) Wenn Sie den Wert true für CachePropertyChanges angegeben haben, rufen Sie die CommitPropertyChanges-Methode auf, um die Änderungen auf dem Server einzutragen. Wenn Sie den Wert false für CachePropertyChanges (die Standardeinstellung) angegeben haben, werden die Änderungen sofort an den Server gesendet.

So ändern Sie die Anmeldeinformationen, die von einem sofort aktualisierbaren Abonnenten beim Herstellen einer Verbindung mit dem Transaktionsverleger verwendet werden

  1. Erstellen Sie eine Verbindung mit dem Abonnenten, indem Sie die ServerConnection-Klasse verwenden.

  2. Erstellen Sie eine Instanz der ReplicationDatabase-Klasse für die Abonnementdatenbank. Geben Name und die ServerConnection aus Schritt 1 für ConnectionContext an.

  3. Rufen Sie die LoadProperties-Methode auf, um die Eigenschaften des Objekts abzurufen. Wenn diese Methode false zurückgibt, wurden entweder die Datenbankeigenschaften in Schritt 2 falsch definiert, oder das Abonnementdatenbank ist nicht vorhanden.

  4. Rufen Sie die LinkPublicationForUpdateableSubscription-Methode auf, und übergeben Sie hierbei die folgenden Parameter:

    • Publisher – Den Namen des Verlegers.

    • PublisherDB – Den Namen der Veröffentlichungsdatenbank.

    • Publication – Den Name der Veröffentlichung, die der sofort aktualisierbare Abonnent abonniert hat.

    • Distributor – Den Namen des Verteilers.

    • PublisherSecurity – Ein PublisherConnectionSecurityContext-Objekt, das den Typ des Sicherheitsmodus, der vom sofort aktualisierbaren Abonnenten beim Verbindungsaufbau mit dem Verleger verwendet wird, und die Anmeldeinformationen für die Verbindung angibt.

Beispiel

In diesem Beispiel werden der für die Anmeldung angegebene Wert überprüft und alle auf dem Server für die Replikation gespeicherten Kennwörter für die angegebene Windows-Anmeldung bzw. SQL Server-Anwendung geändert.

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