Cómo ver y modificar la configuración de seguridad de una suscripción (programación con RMO)

Los valores de cuenta de seguridad (inicios de sesión y contraseñas) necesarios para la replicación se definen cuando se crean las publicaciones y suscripciones. Puede cambiar estos valores posteriormente utilizando Objetos de administración de replicación (RMO). Las propiedades y clases RMO que utilice dependerán dependen del tipo de agente y el tipo de conexión al servidor.

Nota de seguridadNota de seguridad

Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales, use los servicios de cifrado (en inglés) proporcionados por Microsoft Windows .NET Framework.

Para cambiar todas las instancias de una contraseña almacenadas en un servidor de replicación

  1. Cree una conexión al servidor de replicación mediante la clase ServerConnection.

  2. Cree una instancia de la clase ReplicationServer con la conexión del paso 1.

  3. Llame al método ChangeReplicationServerPasswords. Especifique los parámetros siguientes:

    • security_mode- un valor ReplicationSecurityMode que especifica el tipo de autenticación para la que se cambian todas las instancias de la contraseña.

    • login- el inicio de sesión para el que se cambian todas las instancias de la contraseña.

    • password- el nuevo valor de contraseña.

      Nota de seguridadNota de seguridad

      Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales, use los servicios de cifrado (en inglés) proporcionados por Windows .NET Framework.

      Nota

      Sólo un miembro de la función fija de servidor sysadmin puede llamar a este método.

  4. Repita los pasos 1-3 repetidos para cada servidor de la topología de replicación en los que se deba actualizar la contraseña.

Para cambiar la configuración de seguridad del Agente de distribución para una suscripción de inserción a una publicación transaccional

  1. Cree una conexión al publicador mediante la clase ServerConnection.

  2. Cree una instancia de la clase TransSubscription.

  3. Establezca las propiedades PublicationName, DatabaseName, SubscriberNamey SubscriptionDBName para la suscripción y establezca la conexión del paso 1 para la propiedad ConnectionContext.

  4. Llame al método LoadProperties para obtener las propiedades del objeto. Si este método devuelve false, significa que las propiedades de suscripción del paso 3 se definieron incorrectamente, o bien que la suscripción no existe.

  5. Establezca una o más de las propiedades de seguridad siguientes en la instancia de TransSubscription:

    • Para cambiar las credenciales de la cuenta de Windows en la que se ejecuta el agente, establezca los campos Login y Password de SynchronizationAgentProcessSecurity.

    • Para especificar la autenticación de Windows integrada como el tipo de autenticación que utiliza el agente cuando se conecta al suscriptor, establezca el campo WindowsAuthentication de la propiedad SubscriberSecurity en true.

    • Para especificar la autenticación de SQL Server como el tipo de autenticación que utiliza el agente cuando se conecta al suscriptor, establezca el campo WindowsAuthentication de la propiedad SubscriberSecurity en falsey especifique las credenciales de inicio de sesión del suscriptor para los campos SqlStandardLogin y SqlStandardPassword.

      Nota

      La conexión de agente al distribuidor siempre se realiza utilizando las credenciales de Windows especificadas por SynchronizationAgentProcessSecurity. Esta cuenta también se utiliza para realizar conexiones remotas mediante la autenticación de Windows.

  6. (Opcional) Si especificó el valor true para CachePropertyChanges, llame al método CommitPropertyChanges para confirmar los cambios en el servidor. Si especificó el valor false para CachePropertyChanges (predeterminado), los cambios se envían inmediatamente al servidor.

Para cambiar la configuración de seguridad del Agente de distribución para una suscripción de extracción a una publicación transaccional

  1. Cree una conexión al suscriptor mediante la clase ServerConnection.

  2. Cree una instancia de la clase TransPullSubscription.

  3. Establezca las propiedades PublicationName, DatabaseName, PublisherNamey PublicationDBName para la suscripción y establezca la conexión del paso 1 para la propiedad ConnectionContext.

  4. Llame al método LoadProperties para obtener las propiedades del objeto. Si este método devuelve false, significa que las propiedades de suscripción del paso 3 se definieron incorrectamente, o bien que la suscripción no existe.

  5. Establezca una o más de las propiedades de seguridad siguientes en la instancia de TransPullSubscription:

    • Para cambiar las credenciales de la cuenta de Windows en la que se ejecuta el agente, establezca los campos Login y Password de SynchronizationAgentProcessSecurity.

    • Para especificar la autenticación de Windows integrada como el tipo de autenticación que utiliza el agente cuando se conecta al distribuidor, establezca el campo WindowsAuthentication de la propiedad DistributorSecurity en true.

    • Para especificar la autenticación de SQL Server como el tipo de autenticación que utiliza el agente cuando se conecta al distribuidor, establezca el campo WindowsAuthentication de la propiedad DistributorSecurity en falsey especifique las credenciales de inicio de sesión del distribuidor para los campos SqlStandardLogin y SqlStandardPassword.

      Nota

      La conexión de agente al Suscriptor siempre se realiza utilizando las credenciales de Windows especificadas por SynchronizationAgentProcessSecurity. Esta cuenta también se utiliza para realizar conexiones remotas mediante la autenticación de Windows.

  6. (Opcional) Si especificó el valor true para CachePropertyChanges, llame al método CommitPropertyChanges para confirmar los cambios en el servidor. Si especificó el valor false para CachePropertyChanges (predeterminado), los cambios se envían inmediatamente al servidor.

Para cambiar la configuración de seguridad del Agente de mezcla para una suscripción de extracción a una publicación de mezcla

  1. Cree una conexión al suscriptor mediante la clase ServerConnection.

  2. Cree una instancia de la clase MergePullSubscription.

  3. Establezca las propiedades PublicationName, DatabaseName, PublisherNamey PublicationDBName para la suscripción y establezca la conexión del paso 1 para la propiedad ConnectionContext.

  4. Llame al método LoadProperties para obtener las propiedades del objeto. Si este método devuelve false, significa que las propiedades de suscripción del paso 3 se definieron incorrectamente, o bien que la suscripción no existe.

  5. Establezca una o más de las propiedades de seguridad siguientes en la instancia de MergePullSubscription:

    • Para cambiar las credenciales de la cuenta de Windows en la que se ejecuta el agente, establezca los campos Login y Password de SynchronizationAgentProcessSecurity.

    • Para especificar la autenticación de Windows integrada como el tipo de autenticación que utiliza el agente cuando se conecta al distribuidor, establezca el campo WindowsAuthentication de la propiedad DistributorSecurity en true.

    • Para especificar la autenticación de SQL Server como el tipo de autenticación que utiliza el agente cuando se conecta al distribuidor, establezca el campo WindowsAuthentication de la propiedad DistributorSecurity en falsey especifique las credenciales de inicio de sesión del distribuidor para los campos SqlStandardLogin y SqlStandardPassword.

    • Para especificar la autenticación de Windows integrada como el tipo de autenticación que utiliza el agente cuando se conecta al publicador, establezca el campo WindowsAuthentication de la propiedad PublisherSecurity en true.

    • Para especificar la autenticación de SQL Server como el tipo de autenticación que utiliza el agente cuando se conecta al publicador, establezca el campo WindowsAuthentication de la propiedad PublisherSecurity en falsey especifique las credenciales de inicio de sesión del publicador para los campos SqlStandardLogin y SqlStandardPassword.

      Nota

      La conexión de agente al suscriptor siempre se realiza utilizando las credenciales de Windows especificadas por SynchronizationAgentProcessSecurity. Esta cuenta también se utiliza para realizar conexiones remotas mediante la autenticación de Windows.

  6. (Opcional) Si especificó el valor true para CachePropertyChanges, llame al método CommitPropertyChanges para confirmar los cambios en el servidor. Si especificó el valor false para CachePropertyChanges (predeterminado), los cambios se envían inmediatamente al servidor.

Para cambiar la configuración de seguridad del Agente de mezcla para una suscripción de inserción a una publicación de mezcla

  1. Cree una conexión al publicador mediante la clase ServerConnection.

  2. Cree una instancia de la clase MergeSubscription.

  3. Establezca las propiedades PublicationName, DatabaseName, SubscriberNamey SubscriptionDBName para la suscripción y establezca la conexión del paso 1 para la propiedad ConnectionContext.

  4. Llame al método LoadProperties para obtener las propiedades del objeto. Si este método devuelve false, significa que las propiedades de suscripción del paso 3 se definieron incorrectamente, o bien que la suscripción no existe.

  5. Establezca una o más de las propiedades de seguridad siguientes en la instancia de MergeSubscription:

    • Para cambiar las credenciales de la cuenta de Windows en la que se ejecuta el agente, establezca los campos Login y Password de SynchronizationAgentProcessSecurity.

    • Para especificar la autenticación de Windows integrada como el tipo de autenticación que utiliza el agente cuando se conecta al suscriptor, establezca el campo WindowsAuthentication de la propiedad SubscriberSecurity en true.

    • Para especificar la autenticación de SQL Server como el tipo de autenticación que utiliza el agente cuando se conecta al suscriptor, establezca el campo WindowsAuthentication de la propiedad SubscriberSecurity en falsey especifique las credenciales de inicio de sesión del suscriptor para los campos SqlStandardLogin y SqlStandardPassword.

    • Para especificar la autenticación de Windows integrada como el tipo de autenticación que utiliza el agente cuando se conecta al publicador, establezca el campo WindowsAuthentication de la propiedad PublisherSecurity en true.

    • Para especificar la autenticación de SQL Server como el tipo de autenticación que utiliza el agente cuando se conecta al publicador, establezca el campo WindowsAuthentication de la propiedad PublisherSecurity en falsey especifique las credenciales de inicio de sesión del publicador para los campos SqlStandardLogin y SqlStandardPassword.

      Nota

      La conexión de agente al distribuidor siempre se realiza utilizando las credenciales de Windows especificadas por SynchronizationAgentProcessSecurity. Esta cuenta también se utiliza para realizar conexiones remotas mediante la autenticación de Windows.

  6. (Opcional) Si especificó el valor true para CachePropertyChanges, llame al método CommitPropertyChanges para confirmar los cambios en el servidor. Si especificó el valor false para CachePropertyChanges (predeterminado), los cambios se envían inmediatamente al servidor.

Para cambiar la información de inicio de sesión utilizada por un suscriptor de actualización inmediata cuando se conecta al publicador transaccional

  1. Cree una conexión al suscriptor mediante la clase ServerConnection.

  2. Cree una instancia de la clase ReplicationDatabase para la base de datos de suscripciones. Especifique Name y ServerConnection del paso 1 para ConnectionContext.

  3. Llame al método LoadProperties para obtener las propiedades del objeto. Si este método devuelve false, significa que las propiedades de suscripción del paso 2 se definieron incorrectamente, o bien que la base de datos no existe.

  4. Llame al método LinkPublicationForUpdateableSubscription, pasando los parámetros siguientes:

    • Publisher - el nombre del publicador.

    • PublisherDB - el nombre de la base de datos de publicación.

    • Publication - el nombre de la publicación a la que se suscribe el suscriptor de actualización inmediata.

    • Distributor - el nombre del distribuidor.

    • PublisherSecurity - Un objeto PublisherConnectionSecurityContext que especifica el tipo de modo de seguridad que utiliza el suscriptor de actualización inmediata cuando se conecta al publicador y las credenciales de inicio de sesión para la conexión.

Ejemplo

Este ejemplo comprueba el valor de inicio de sesión proporcionado y cambia todas las contraseñas para el inicio de sesión de Windows proporcionado o el inicio de sesión de SQL Server almacenado por replicación en el 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