Compartilhar via


Como exibir e modificar as configurações de segurança de assinatura (programação RMO)

As configurações de conta de segurança (logons e senhas) requeridas pela replicação são definidas quando são criadas as publicações e as assinaturas. Você pode alterar essas configurações mais tarde usando o RMO (Replication Management Objects). As classes e propriedades RMO que você usa dependem do tipo de agente e do tipo de conexão de servidor.

Observação sobre segurançaObservação sobre segurança

Quando possível, solicite que os usuários insiram as credenciais de segurança em tempo de execução. Se for preciso armazenar credenciais, use os serviços criptográficos fornecidos pelo Microsoft Windows .NET Framework.

Para alterar todas as instâncias de uma senha armazenada em um servidor de replicação

  1. Crie uma conexão com o servidor de replicação usando a classe ServerConnection.

  2. Crie uma instância da classe ReplicationServer usando a conexão da Etapa 1.

  3. Chame o método ChangeReplicationServerPasswords. Especifique os seguintes parâmetros:

    • O valor security_mode - a ReplicationSecurityModeque especifica o tipo de autenticação para a qual todas as instâncias da senha estão sendo alteradas.

    • login - o logon para a qual todas as instâncias da senha estão sendo alteradas.

    • password- o novo valor de senha.

      Observação sobre segurançaObservação sobre segurança

      Quando possível, solicite que os usuários insiram as credenciais de segurança em tempo de execução. Se for preciso armazenar credenciais, use os serviços criptográficos fornecidos pelo Windows .NET Framework.

      ObservaçãoObservação

      Só um membro da sysadmin função de servidor fixa pode chamar este método.

  4. Repita as Etapas 1-3 em todo servidor, na topologia de replicação, onde a senha deve ser atualizada.

Para alterar as configurações de segurança para o Distribution Agent de uma assinatura push para uma publicação transacional

  1. Crie uma conexão com o Publicador usando a classe ServerConnection.

  2. Crie uma instância da classe TransSubscription.

  3. Defina o PublicationName, DatabaseName, SubscriberName, e as propriedades SubscriptionDBName para a assinatura, e defina a conexão da Etapa 1 para a propriedade. ConnectionContext.

  4. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de assinatura na etapa 3 foram definidas incorretamente ou a assinatura não existe.

  5. Defina uma ou mais das seguintes propriedades de segurança na instância de TransSubscription:

  6. (Opcional) Se você especificar um valor de true para CachePropertyChanges, chame o método CommitPropertyChanges para confirmar as alterações no servidor. (Opcional) Se você especificar um valor de false para CachePropertyChanges (padrão), as alterações serão enviadas imediatamente ao servidor.

Para alterar as configurações de segurança para o Distribution Agent de uma assinatura pull para uma publicação transacional

  1. Crie uma conexão com o Assinante usando a classe ServerConnection.

  2. Crie uma instância da classe TransPullSubscription.

  3. Defina o PublicationName, DatabaseName, PublisherName, e as propriedades PublicationDBName para a assinatura, e defina a conexão da Etapa 1 para a propriedade ConnectionContext.

  4. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de assinatura na etapa 3 foram definidas incorretamente ou a assinatura não existe.

  5. Defina uma ou mais das seguintes propriedades de segurança na instância de TransPullSubscription:

  6. (Opcional) Se você especificar um valor de true para CachePropertyChanges, chame o método CommitPropertyChanges para confirmar as alterações no servidor. (Opcional) Se você especificar um valor de false para CachePropertyChanges (padrão), as alterações serão enviadas imediatamente ao servidor.

Para alterar as configurações de segurança para o Merge Agent para uma assinatura pull para uma publicação de mesclagem

  1. Crie uma conexão com o Assinante usando a classe ServerConnection.

  2. Crie uma instância da classe MergePullSubscription.

  3. Defina o PublicationName, DatabaseName, PublisherName, e as propriedades PublicationDBName para a assinatura, e defina a conexão da Etapa 1 para a propriedade ConnectionContext.

  4. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de assinatura na etapa 3 foram definidas incorretamente ou a assinatura não existe.

  5. Defina uma ou mais das seguintes propriedades de segurança na instância de MergePullSubscription:

  6. (Opcional) Se você especificar um valor de true para CachePropertyChanges, chame o método CommitPropertyChanges para confirmar as alterações no servidor. (Opcional) Se você especificar um valor de false para CachePropertyChanges (padrão), as alterações serão enviadas imediatamente ao servidor.

Para alterar as configurações de segurança para o Merge Agent para uma assinatura push para uma publicação de mesclagem

  1. Crie uma conexão com o Publicador usando a classe ServerConnection.

  2. Crie uma instância da classe MergeSubscription.

  3. Defina o PublicationName, DatabaseName, SubscriberName, e as propriedades SubscriptionDBName para a assinatura, e defina a conexão da Etapa 1 para a propriedade ConnectionContext.

  4. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de assinatura na etapa 3 foram definidas incorretamente ou a assinatura não existe.

  5. Defina uma ou mais das seguintes propriedades de segurança na instância de MergeSubscription:

  6. (Opcional) Se você especificar um valor de true para CachePropertyChanges, chame o método CommitPropertyChanges para confirmar as alterações no servidor. (Opcional) Se você especificar um valor de false para CachePropertyChanges (padrão), as alterações serão enviadas imediatamente ao servidor.

Para alterar a informação de logon usada por um Assinante de atualização imediata ao se conectar ao publicador transacional

  1. Crie uma conexão com o Assinante usando a classe ServerConnection.

  2. Crie uma instância da classe ReplicationDatabase para o banco de dados de assinatura. Especifique Name e o ServerConnection da Etapa 1 para ConnectionContext.

  3. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de banco de dados na etapa 2 foram definidas incorretamente ou o banco de dados não existe.

  4. Chame o método LinkPublicationForUpdateableSubscription, passando os parâmetros seguintes:

    • Publisher - o nome do Publicador.

    • PublisherDB - o nome do banco de dados de publicação.

    • Publication - o nome da publicação para a qual o Assinante de atualização imediata fez sua assinatura.

    • Distributor - o nome do Distribuidor.

    • PublisherSecurity - A PublisherConnectionSecurityContext objeto que especifica o tipo de modo de segurança usado pelo Assinante de atualização imediata ao se conectar ao Publicador e as credenciais de logon para a conexão.

Exemplo

Este exemplo verifica o valor do logon fornecido e altera todas as senhas para o logon do Windows fornecido ou o logon do SQL Server armazenado por replicação no servidor.

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