Características que utilizan desvíos o técnicas similares para cambiar el comportamiento de Microsoft SQL Server pueden hacer lo siguiente:
- Problemas de rendimiento
- Resultados incorrectos
- Daños en el disco y memoria
- Pérdida de la respuesta de SQL Server
- Terminación inesperada del proceso
- Incapacidad para utilizar los diagnósticos del estándar, por ejemplo, la función fn_get_sql y el comando DBCC INPUTBUFFER
- Mayores posibilidades de problemas de seguridad
Nota Microsoft no proporciona servicios de soporte para las características de otros fabricantes que utilizan desvíos o técnicas similares para cambiar el comportamiento de SQL Server. Si está trabajando con los servicios de soporte técnico de SQL Server en un problema de SQL Server y se identifica que podrían haber fenómenos de desvíos o técnicas similares que cambian el comportamiento de SQL Server, el profesional de soporte técnico le pedirá deshabilitar o quitar tales desvíos o características similares como un paso de solución de problemas. Antes de que pueda producir la solución de problemas adicionales, debe reproducir el problema sin ninguna funcionalidad de desvío presente. El problema no debe presentarse, Microsoft podrá recomendar póngase en contacto con el proveedor para la función de otros fabricantes y continúe resolviendo el problema con la dirección de ese proveedor.
Desvíos son eficaces. Desvíos proporcionan capacidades mejoradas y un equilibrio de riesgos/recompensa. Por lo general, cuando se implementa un desvío en SQL Server, el código aplicable se inserta en el espacio de proceso. Se interceptan funciones o métodos de SQL Server. Esta actividad puede cambiar el comportamiento básico del rendimiento de SQL Server.
Éstas son algunas situaciones de ejemplo y los posibles efectos secundarios:
- Los paquetes entrantes de tráfico (TDS) de red son analizados y cambiar. El desvío se agrega en una ubicación crítica en el subproceso de proceso de red de net_readdata. Incluso algunos 100 ciclos de CPU en esta ubicación pueden reducir significativamente el rendimiento de la velocidad de proceso por lotes.
Un cambio en los datos reales de TDS puede dar lugar a escritores de memoria. Este problema ha desencadenado diversos problemas de estabilidad de SQL Server y dañar los datos. Problemas pueden provocar un paquete TDS parcialmente se puede cambiar y volver a reproducir basura a SQL Server. Servicios en este nivel de registro pueden exponer las contraseñas y otra información confidencial que SQL Server traza está diseñado para suprimir y para ayudar a proteger. - Rutinas de análisis de SQL Server son desviadas para cambiar el comportamiento. Éstos son los posibles efectos secundarios:
- Los planes de ejecución no coinciden con texto de la consulta real.
- Sólo una vez desde el cliente se envía un comando. Sin embargo, el comando se ejecuta varias veces.
- Resultados de seguimiento muestran el comando original en lugar de la consulta modificada.
- El comando DBCC INPUTBUFFER muestra el comando original en lugar de la consulta modificada.
- La función fn_get_sql muestra datos incorrectos. Además, la función fn_get_sql es susceptible a las excepciones y resultados incorrectos. La función fn_get_sql es utilizada por muchas soluciones de supervisión y puede provocar problemas en las soluciones de supervisión.
- En general podrán ser interrumpidos Scheduler de modo de usuario (UMS) y la programación de SQL Server del sistema operativo (SQLOS). Esto conduce a la pérdida de la respuesta de SQL Server, los cambios de rendimiento y las interrupciones.
- API de Win32 que proporciona características de seguridad mejoradas son desviadas. Dependiendo de la implementación, características de registro en este nivel podrían exponer las contraseñas y otra información confidencial. En general se interrumpe UMS y SQLOS de programación. Esto conduce a la pérdida de la respuesta de SQL Server y a las interrupciones.
En el ejemplo siguiente se muestra las API de kernel32
!GetQueuedCompletionStatus se ha desviado función.
MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait
En el ensamblado de la función
GetQueuedCompletionStatus , la primera instrucción se ha reemplazado por una instrucción de salto.
0:038> u kernel32!GetQueuedCompletionStatus
kernel32!GetQueuedCompletionStatus
77e660f1 e90a9f00aa jmp 21e70000 ß This points to an address that does not appear in the loaded module list (lm). It is injected code.
77e660f6 83ec10 sub esp,10h
El ensamblado para el código insertado muestra la actividad de detoured y una llamada al archivo MyDLL.
0:038> u 21e70000
21e70000 55 push ebp
21e70001 8bec mov ebp,esp
21e70003 51 push ecx
21e70004 8b4518 mov eax,dword ptr [ebp+18h]
21e70007 50 push eax
21e70008 8b4d14 mov ecx,dword ptr [ebp+14h]
21e7000b 51 push ecx
21e7000c 8b5510 mov edx,dword ptr [ebp+10h]
21e7000f 52 push edx
21e70010 8b450c mov eax,dword ptr [ebp+0Ch]
21e70013 50 push eax
21e70014 8b4d08 mov ecx,dword ptr [ebp+8]
21e70017 51 push ecx
21e70018 e8234d19ee call MyDLL+0x4d40 (10004d40) <- Call to the MyDLL file.
21e7001d 8945fc mov dword ptr [ebp-4],eax
21e70020 8b55fc mov edx,dword ptr [ebp-4]
Puede utilizar herramientas de depuración para Windows para determinar si se utilizan los desvíos. Para ello, siga estos pasos.
Nota Pruebe siempre este método antes de intentar en producción. Cuando utiliza herramientas de depuración para Windows, el proceso puede quedarse congelado al ejecutar los comandos. Este comportamiento puede afectar negativamente a un servidor de producción.
- Adjuntar Debugging Tools for Windows a SQL Server o cargar un archivo de volcado de usuario completo.
- Usar el siguiente comando de depurador. Este comando examina cada imagen con respecto a la imagen en disco para determinar si se ha insertado desvíos.
!for_each_module "!chkimg -v @#Base -d"
- Desconectar al depurador.
Para obtener herramientas de depuración para Windows, visite el siguiente sitio Web de Microsoft:
Si se ha modificado la imagen en memoria, el resultado sería similar al siguiente:
Comparison image path: c:\program files\microsoft sql server\mssql\binn\ssnetlib.dll\ssnetlib.dll
Scanning section: .text
Size: 56488
Range to scan: 0c261000-0c26eca8
0c263710-0c26371a 11 bytes - ssnetlib!ConnectionClose
[ 8b ff 55 8b ec 83 ec 10:68 00 00 00 00 e9 27 8a ]
0c2641e0-0c2641ea 11 bytes - ssnetlib!ConnectionReadAsync (+0xad0)
[ 8b ff 55 8b ec 83 ec 38:68 00 00 00 00 e9 00 7e ]
0c265160-0c26516a 11 bytes - ssnetlib!ConnectionWriteAsync (+0xf80)
[ 8b ff 55 8b ec 83 ec 28:68 00 00 00 00 e9 ba 70 ]
Total bytes compared: 56488(100%)
Number of errors: 33
33 errors : 0c260000 (0c263710-0c26516a)Puede revisar el ensamblado que se va a estudiar con más detenimiento el problema, como se indica a continuación:
0:038> u ssnetlib!ConnectionClose
ssnetlib!ConnectionClose]:
0c263710 6800000000 push 0
0c263715 e9278ada03 jmp MyDLL!MyGetQueuedCompletionStatus <- A detour has been installed.
Se recomienda en contacto con el proveedor de los desvíos o de las técnicas similares para obtener información acerca de cómo utilizar los desvíos o técnicas similares en SQL Server. Para obtener más información acerca de desvíos y técnicas similares, visite el siguiente sitio Web del centro de investigación de Microsoft:
Id. de artículo: 920925 - Última revisión: jueves, 10 de enero de 2013 - Versión: 1.0
La información de este artículo se refiere a:
- Microsoft SQL Server 2005 Express Edition
- Microsoft SQL Server 2005 Express Edition with Advanced Services
- Microsoft SQL Server 2005 Standard Edition
- Microsoft SQL Server 2005 Workgroup Edition
- Microsoft SQL Server 2005 Developer Edition
- Microsoft SQL Server 2005 Enterprise Edition
- Microsoft SQL Server 2005 Standard X64 Edition
- Microsoft SQL Server 2005 Enterprise X64 Edition
- Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
- Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
- Microsoft SQL Server 2000 Personal Edition
- Microsoft SQL Server 2000 Standard Edition
- Microsoft SQL Server 2000 Workgroup Edition
- Microsoft SQL Server 2000 Developer Edition
- Microsoft SQL Server 2000 Enterprise Edition
- Microsoft SQL Server 2008 Developer
- Microsoft SQL Server 2008 Enterprise
- Microsoft SQL Server 2008 Express
- Microsoft SQL Server 2008 R2 Datacenter
- Microsoft SQL Server 2008 R2 Developer
- Microsoft SQL Server 2008 R2 Enterprise
- Microsoft SQL Server 2008 R2 Express
- Microsoft SQL Server 2008 R2 Standard
- Microsoft SQL Server 2008 R2 Web
- Microsoft SQL Server 2008 R2 Workgroup
- Microsoft SQL Server 2008 Web
- Microsoft SQL Server 2008 Workgroup
- Microsoft SQL Server 2012 Developer
- Microsoft SQL Server 2012 Enterprise
- Microsoft SQL Server 2012 Express
- Microsoft SQL Server 2012 Standard
- Microsoft SQL Server 2012 Web
- SQL Server 2012 Enterprise Core
| kbtshoot kbexpertiseadvanced kbinfo kbmt KB920925 KbMtes |
Traducción automáticaIMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés):
920925
(http://support.microsoft.com/kb/920925/en-us/
)