Cómo crear un extremo de reflejo para la autenticación de Windows (Transact-SQL)

Cada instancia de servidor de creación de reflejo de base de datos requiere un puerto de escucha único asignado al extremo de creación de reflejo de base de datos de la instancia. Una instancia de servidor sólo puede tener un extremo de creación de reflejo de base de datos, que tiene un puerto único. Un extremo de creación de reflejo de base de datos puede utilizar cualquier puerto disponible en el sistema local cuando se crea el extremo. Todas las sesiones de creación de reflejo de base de datos de una instancia de servidor escuchan en dicho puerto y todas las conexiones entrantes para la creación de reflejo de base de datos utilizan dicho puerto.

Al crear el extremo, un administrador del sistema especifica los métodos de autenticación y cifrado de la instancia del servidor.

Nota importanteImportante

Si existe un extremo para la creación de reflejo de la base de datos y ya se está utilizando, utilice ese extremo para cualquier otra sesión que establezca en la instancia de servidor. Si quita un extremo en uso, se interrumpirán las conexiones de las sesiones existentes. Si se ha establecido un testigo para una sesión, la eliminación del extremo de reflejo de la base de datos puede hacer que el servidor principal de esa sesión pierda quórum; si sucede esto, la base de datos se queda sin conexión y los usuarios quedan desconectados. Para obtener más información, vea Quórum: cómo un testigo afecta a la disponibilidad de la base de datos.

Para crear un extremo de reflejo utilizando la autenticación de Windows

  1. Conecte con la instancia del servidor para la que desea crear un extremo de reflejo de la base de datos.

  2. Determine si ya existe un extremo de reflejo de la base de datos utilizando la siguiente instrucción:

    SELECT name, role_desc, state_desc FROM sys.database_mirroring_endpoints 
    
    Nota importanteImportante

    Si ya existe un extremo de reflejo para la instancia del servidor, utilice ese extremo para todas las otras sesiones que establezca en la instancia del servidor.

  3. Para usar Transact-SQL para crear un extremo que se utilice con la autenticación de Windows, utilice la instrucción CREATE ENDPOINT. La instrucción toma la siguiente forma general:

    CREATE ENDPOINT <endpointName>

        STATE=STARTED

        AS TCP ( LISTENER_PORT = <listenerPortList> )

        FOR DATABASE_MIRRORING

        (

            [ AUTHENTICATION = WINDOWS [ <authorizationMethod> ]

            ]

            [ [,] ENCRYPTION = REQUIRED

                    [ ALGORITHM { <algorithm> } ]

            ]

            [,] ROLE = <role>

        )

    donde

    • <endpointName> es un nombre exclusivo para el extremo de reflejo de la base de datos de la instancia del servidor.

    • STARTED especifica que el extremo debe iniciarse y que debe empezar a escuchar las conexiones. Un extremo de reflejo de base de datos normalmente se crea en el estado STARTED. Opcionalmente, puede iniciar una sesión en el estado STOPPED (valor predeterminado) o DISABLED.

    • <listenerPortList> es un número de puerto único (nnnn) en el que desea que el servidor escuche los mensajes de creación de reflejo de base de datos. Sólo se permite TCP; si se especifica cualquier otro protocolo se provoca un error.

      Un número de puerto sólo se puede usar una vez por sistema. Un extremo de creación de reflejo de base de datos puede utilizar cualquier puerto disponible en el sistema local cuando se crea el extremo. Para identificar los puertos que están usando los extremos TCP del sistema, utilice la siguiente instrucción Transact-SQL:

      SELECT name, port FROM sys.tcp_endpoints
      
      Nota importanteImportante

      Cada instancia del servidor requiere sólo un puerto de escucha único.

    • Para la autenticación de Windows, la opción AUTHENTICATION es opcional, a menos que desee que el extremo utilice sólo NTLM o Kerberos para autenticar conexiones. <authorizationMethod> especifica el método que se utiliza para autenticar conexiones como uno de los siguientes: NTLM, KERBEROS o NEGOTIATE. El valor predeterminado, NEGOTIATE, hace que el extremo utilice el protocolo de negociación de Windows para elegir NTLM o Kerberos. La negociación habilita conexiones con o sin autenticación, dependiendo del nivel de autenticación del extremo opuesto. Para obtener información acerca de estos métodos, vea Tipos de autenticación de extremos.

    • ENCRYPTION se establece en REQUIRED de forma predeterminada. Esto significa que todas las conexiones con este punto final deben usar cifrado. No obstante, puede deshabilitar el cifrado o hacer que sea opcional en un extremo. Las alternativas son las siguientes:

      Valor

      Definición

      DISABLED

      Especifica que los datos enviados en una conexión no están cifrados.

      SUPPORTED

      Especifica que los datos están cifrados sólo si el extremo opuesto especifica SUPPORTED o REQUIRED.

      REQUIRED

      Especifica que los datos enviados en una conexión deben estar cifrados.

      Si un extremo requiere cifrado, el otro extremo debe tener ENCRYPTION establecido en SUPPORTED o REQUIRED.

    • <algorithm> proporciona la opción de especificar estándares de cifrado para el extremo. El valor de <algorithm> puede ser uno de los siguientes algoritmos o combinaciones de algoritmos: RC4, AES, AES RC4 o RC4 AES.

      AES RC4 especifica que este extremo negociará el algoritmo de cifrado, dando preferencia al algoritmo AES. RC4 AES especifica que este extremo negociará el algoritmo de cifrado, dando preferencia al algoritmo RC4. Si ambos extremos especifican ambos algoritmos pero en órdenes diferentes, el extremo que acepta la conexión gana.

      [!NOTA]

      Aunque es notablemente más rápido que AES, RC4 es un algoritmo relativamente débil, mientras que AES es un algoritmo relativamente fuerte. Por tanto, se recomienda que utilice el algoritmo AES.

    • <role> define la función o las funciones que el servidor puede llevar a cabo. Se tiene que especificar ROLE.

      Para permitir que una instancia de servidor sirva como una función para una sesión de reflejo de base de datos y una función diferente para otra sesión, especifique ROLE=ALL. Para hacer que la instancia de un servidor sólo sea un asociado o un testigo, especifique ROLE=PARTNER o ROLE=WITNESS, respectivamente.

      [!NOTA]

      En SQL Server Express, WITNESS es la única opción disponible.

    Para obtener una descripción completa de la sintaxis de CREATE ENDPOINT, vea CREATE ENDPOINT (Transact-SQL).

    [!NOTA]

    Para cambiar un extremo existente, utilice ALTER ENDPOINT (Transact-SQL).

Ejemplo

En el siguiente ejemplo se crean dos extremos para las instancias de servidor predeterminadas en tres sistemas independientes:

Función de la instancia de servidor

Nombre del equipo host

Asociado (inicialmente en la función principal)

SQLHOST01\.

Asociado (inicialmente en la función de reflejo)

SQLHOST02\.

Testigo

SQLHOST03\.

En este ejemplo, los tres extremos utilizan el número de puerto 7022, aunque funcionaría cualquier número de puerto disponible. La opción AUTHENTICATION no es necesaria, porque los extremos utilizan el tipo predeterminado, Autenticación de Windows. La opción ENCRYPTION tampoco es necesaria, porque se supone que los extremos van a negociar el método de autenticación de una conexión, que es el comportamiento predeterminado para la autenticación de Windows. Además, todos los extremos requieren cifrado, que es el comportamiento predeterminado.

Cada instancia de servidor se limita a actuar como asociado o como testigo, y el extremo de cada servidor especifica expresamente la función (ROLE=PARTNER o ROLE=WITNESS).

Nota importanteImportante

Cada instancia de servidor sólo puede tener un extremo. Por lo tanto, si desea que una instancia de servidor actúe como asociado en ciertas sesiones y como testigo en otras, especifique ROLE=ALL.

--Endpoint for initial principal server instance, which
--is the only server instance running on SQLHOST01.
CREATE ENDPOINT endpoint_mirroring
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 7022 )
    FOR DATABASE_MIRRORING (ROLE=PARTNER);
GO
--Endpoint for initial mirror server instance, which
--is the only server instance running on SQLHOST02.
CREATE ENDPOINT endpoint_mirroring
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 7022 )
    FOR DATABASE_MIRRORING (ROLE=PARTNER);
GO
--Endpoint for witness server instance, which
--is the only server instance running on SQLHOST03.
CREATE ENDPOINT endpoint_mirroring
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 7022 )
    FOR DATABASE_MIRRORING (ROLE=WITNESS);
GO

Para obtener un ejemplo completo que muestre la configuración de la seguridad, la preparación de la base de datos reflejada, el establecimiento de asociados y la agregación de un testigo, vea Configurar la creación de reflejo de la base de datos.