¿Cómo puedo inspeccionar la configuración de seguridad de un punto final de SQL Server?


10

Estoy en el proceso de crear un entorno TEST para nuestro personal de desarrollo de SQL Server.

En producción tenemos 3 servidores SQL, SQL01contiene varias bases de datos que se reflejan SQL02. SQL03actúa como testigo en una "alta seguridad con conmutación por error automática" o configuración sincrónica.

Utilicé VMWare P2V para virtualizar las tres máquinas en hardware separado, reconfiguré los SID de las máquinas y bloqueé las direcciones IP de nuestros servidores de producción desde estas nuevas máquinas.

Inicialmente había olvidado bloquear la máquina testigo de producción, por lo que las bases de datos en las máquinas TEST todavía usaban la SQL03máquina como testigo. Al notar el problema, decidí reconfigurar las bases de datos en TEST para señalar al testigo de TEST recién virtualizado, llámelo TEST03.

Para reconfigurar la base de datos para usar el nuevo testigo, ingresé el siguiente comando en el servidor primario TEST01:

ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';

La respuesta fue inesperada:

The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'.  The database mirroring configuration was
not changed.  Verify that the server is connected, and try again.

Estaba muy perplejo con este mensaje de error ya que la configuración funciona en las máquinas de producción y no se ha modificado de ninguna manera en las máquinas de prueba.

Para que esto funcione, necesitaba crear un LOGINtestigo de prueba:

CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];

y GRANTsus CONNECTderechos sobre el punto final en cuestión:

GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];

Luego pude apuntar con éxito las bases de datos duplicadas en el entorno TEST al nuevo testigo de prueba.

¿Cómo puedo inspeccionar el punto final de testigo de producción para ver qué seguridad está asociada con él?

Supongo que debe haber algún catálogo de sistema que pueda inspeccionar, sin embargo, Books-on-Line no parece tener nada específico para Endpoints, y Bing está bien, Bingless ...


Información adicional:

SELECT ep.endpoint_id, p.class_desc, p.permission_name, ep.name, sp.name 
FROM sys.server_permissions p
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id
WHERE class = '105';

devoluciones:

endpoint_id class_desc  permission_name endpoint_name   principal_name
2           ENDPOINT    CONNECT TSQL    Local Machine   public
3           ENDPOINT    CONNECT TSQL    Named Pipes     public
4           ENDPOINT    CONNECT TSQL    Default TCP     public
5           ENDPOINT    CONNECT TSQL    Default VIA     public

Y:

SELECT name, endpoint_id, protocol_desc, type_desc, role_desc 
FROM sys.database_mirroring_endpoints;

Devoluciones:

name        endpoint_id  protocol_desc  type_desc           role_desc 
Mirroring   65536        TCP            DATABASE_MIRRORING  WITNESS

Parece que no hay entrada sys.server_permissionspara el objeto de punto final reflejado. No major_idy no minor_idcoincide con 65536. Además, ninguna de las bases de datos del sistema contiene ninguna referencia al punto final.

Estoy perdido

Respuestas:


7

Después de pasar una parte del día tratando de mover bases de datos duplicadas de servidor a servidor en nuestro entorno DEV en preparación para nuestro cambio a SQL Server 2012, me encontré con este documento de MSDN que explica que la seguridad ENDPOINT se determina únicamente en función del tipo de cuenta SQL Server se está ejecutando bajo. Si SQL Server está utilizando una cuenta de dominio, esa cuenta automáticamente tiene acceso al punto final. Si SQL Server está utilizando una cuenta integrada como [Servicio de red] o [Sistema local], etc., el punto final debe configurarse con un certificado de seguridad, y solo los titulares del certificado pueden acceder al punto final.

La sección relevante del documento:

Determinación del tipo de autenticación para un punto final de creación de reflejo de la base de datos

Es importante comprender que las cuentas de servicio de SQL Server de las instancias de su servidor determinan qué tipo de autenticación puede usar para sus puntos finales de reflejo de la base de datos, de la siguiente manera:

Si todas las instancias del servidor se ejecutan con una cuenta de servicio de dominio, puede usar la autenticación de Windows para los puntos finales de reflejo de su base de datos. Si todas las instancias del servidor se ejecutan como la misma cuenta de usuario de dominio, los inicios de sesión de usuario correctos existen automáticamente en ambas bases de datos maestras. Esto simplifica la configuración de seguridad para las bases de datos de disponibilidad y se recomienda.

Si alguna instancia del servidor que aloja las réplicas de disponibilidad para un grupo de disponibilidad se ejecuta como cuentas diferentes, el inicio de sesión de cada cuenta debe crearse en el maestro en la otra instancia del servidor. Luego, ese inicio de sesión debe tener permisos CONNECT para conectarse al punto final de duplicación de la base de datos de esa instancia del servidor.

Si las instancias de su servidor usan la autenticación de Windows, puede crear puntos finales de creación de reflejo de la base de datos mediante Transact-SQL, PowerShell o el Asistente de nuevo grupo de disponibilidad.

Nota:

Si una instancia de servidor que hospedará una réplica de disponibilidad carece de un punto final de creación de reflejo de la base de datos, el Asistente para nuevo grupo de disponibilidad puede crear automáticamente un punto final de creación de reflejo de la base de datos que use la autenticación de Windows.

Si alguna instancia del servidor se ejecuta con una cuenta integrada, como Sistema local, Servicio local o Servicio de red, o una cuenta que no sea de dominio, debe usar certificados para la autenticación de punto final. Si está utilizando certificados para sus puntos finales de reflejo de la base de datos, el administrador del sistema debe configurar cada instancia del servidor para usar certificados en las conexiones salientes y entrantes.

No existe un método automatizado para configurar la seguridad de reflejo de la base de datos mediante certificados. Deberá usar la instrucción CREATE ENDPOINT Transact-SQL o el cmdlet New-SqlHadrEndpoint PowerShell. Para obtener más información, vea CREATE ENDPOINT (Transact-SQL).

Remus Rusanu (en su respuesta) identificó correctamente cómo determinar la seguridad en un punto final reflejado; como en:

SELECT ep.name, sp2.name AS Grantee, sp.name AS Grantor, p.permission_name, ep.state_desc
FROM sys.server_permissions p 
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantor_principal_id = sp.principal_id
    INNER JOIN sys.server_principals sp2 ON p.grantee_principal_id = sp2.principal_id
WHERE p.class_desc = 'ENDPOINT' AND ep.type_desc = 'DATABASE_MIRRORING'

Sin embargo, en mi caso en SQL Server 2005, los puntos finales de duplicación originales no se muestran en los resultados de esta consulta. Supongo que esto se debe a que su seguridad predeterminada permite el acceso CONECTAR a la cuenta en la que se ejecuta SQL Server (como se explicó anteriormente).

Entonces, la respuesta canónica a la pregunta, ¿cómo sabe quién tiene acceso CONNECT a un ENDPOINT? Es la suma de la consulta anterior y la cuenta que está utilizando SQL Server, junto con los posibles certificados que haya configurado con acceso al punto final .


4

Simplemente configuré esto para una base de datos en producción y me preguntaba lo mismo porque necesitaba comparar la configuración con otra sesión de duplicación para asegurarme de que coincidía correctamente.

sys.dm_db_mirroring_connectionsdebería proporcionarle lo que desea. Contiene lo principal_nameque es:

Nombre del inicio de sesión que se validó para los permisos de conexión. Para la autenticación de Windows, este valor es el nombre de usuario remoto. Para la autenticación de certificado, este valor es el propietario del certificado.

Si está trabajando con una sesión que está en pausa, aunque no estoy seguro de que esto aún devuelva la información, creo que solo tiene conexiones activas.


Gracias Shaun Eso ciertamente muestra el nombre de usuario remoto realmente conectado al punto final, sin embargo, en realidad no responde a la pregunta de qué configuración de seguridad está permitiendo que ese usuario se conecte en producción, pero no en la prueba. Agradezco la ayuda de todos modos!
Max Vernon

3

Consulte la documentación de Libros en línea para sys.database_mirroring_endpoints

Para los permisos de objetos de servidor nos fijamos en el lugar de siempre, sys.server_permissions. Como en todos los casos en los que la seguridad de Windows está involucrada, las cosas son más complicadas debido a la pertenencia a grupos de Windows, y también debe considerar la jerarquía de permisos .


Observé eso, sin embargo, lo que necesito es una lista de inicios de sesión que tengan acceso CONECTAR al punto final. sys.database_mirroring_endpoints no parece mostrar eso, ¡a menos que me falte algo!
Max Vernon

1
Para los permisos de objetos de servidor nos fijamos en el lugar de siempre, sys.server_permissions. Como en todos los casos en los que la seguridad de Windows está involucrada, las cosas son más complicadas debido a la pertenencia a grupos de Windows, y también debe considerar la jerarquía de permisos .
Remus Rusanu

3
¿Alguna posibilidad de que puedas explicarlo un poco en la respuesta misma?
jcolebrand
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.