DetailPage-MSS-KB

Base de Dados de Conhecimento

ID do artigo: 920925 - Última revisão: sexta-feira, 20 de março de 2015 - Revisão: 4.0

 

Sumário

Suporte da Microsoft encontrou vários produtos de terceiros que usam desvios para fornecer funcionalidades adicionais para o Microsoft SQL Server. Eles são geralmente auditoria funcionalidades. Não há nenhum processo de certificação de terceiros desvios para aplicativos Microsoft. Portanto, em geral, a Microsoft desestimula o uso de desvios.

Recursos que usam desvios ou técnicas semelhantes para alterar o comportamento do SQL Server podem causar os seguintes problemas:
  • Problemas de desempenho
  • Resultados incorretos
  • Corrupção de disco e memória
  • Perda de resposta do SQL Server
  • Terminação de processo inesperado
  • Incapacidade de usar o diagnóstico de padrão, como a função fn_get_sql e o comando DBCC INPUTBUFFER
Você pode encontrar esses mesmos problemas quando você estiver usando software de terceiros como servidores vinculados, procedimentos estendidos ou objetos dentro do processo do SQL Server. Desvios são ocultados DBA. Para descobrir um desvio, você deve usar as técnicas descritas na seção "Mais informações" que segue. Servidores vinculados, objetos e procedimentos estendidos tem registro explícito e definição de interfaces.

Observação: Por causa da natureza oculta de desvios e a falta de interfaces publicados, a Microsoft não fornece serviços de suporte aos recursos de terceiros que utilizam desvios ou técnicas semelhantes. O terceiro é responsável pelo suporte do seu próprio código, assim como seria responsável por seu próprio servidor vinculado ou outro aprovado implantação.

É prática comum, no curso normal de solução de problemas de serviços de suporte Microsoft para pedir que você desativar trabalhos desnecessários e desabilite ou remova componentes de terceiros e técnicas de outras, semelhantes. Microsoft sempre tenta reduzir a superfície do problema enquanto ele é identificar o problema. Depois que o problema for identificado como não relacionadas a trabalhos ou produtos de terceiros, esses trabalhos ou produtos de terceiros podem ser introduzidos para a produção.

Não é nossa intenção de descobrir um desvio e, em seguida, considere a instância do SQL Server não são compatíveis. Microsoft reconhece algumas implementações são necessárias. No entanto, Microsoft requer que você validar a capacidade dos desvios. Um desvio de uma empresa idônea e confiável é definitivamente diferente de um desvio inesperado que é usado por um vírus. A Microsoft não garante ou certificar esses produtos de terceiros ou como os produtos de terceiros interagem com produtos e serviços Microsoft. Em vez disso, os fornecedores são responsáveis pela identificação e a confiabilidade de seus produtos e serviços. Se você tiver alguma dúvida sobre serviços e produtos de terceiros, por favor, chegar aos terceiros aplicável. A Microsoft não é responsável por quaisquer problemas causados pelo uso de produtos de terceiros ou serviços em relação ao SQL Server.

Mais Informações

Desvios oferecem recursos avançados e uma compensação de risco/recompensa. Normalmente, quando um desvio é implementado no SQL Server, o código de terceiros é injetado no espaço de processo. Essa atividade pode alterar o comportamento do SQL Server.

Estas são algumas situações de exemplo e os possíveis efeitos colaterais:
  • Pacotes de tráfego (TDS) de rede de entrada são examinados e alterados. O desvio é adicionado em um local crítico o thread do processo de rede net_readdata. Até 100 ciclos de CPU neste local podem reduzir significativamente a taxa de lote.

    Uma alteração nos dados de TDS reais pode levar à scribblers de memória. Esse problema foi disparado vários problemas de estabilidade de SQL Server e na corrupção de dados. Problemas podem causar um pacote TDS parcialmente seja alterado e a repetição de lixo para SQL Server. Instalações com esse nível de log pode expor as senhas e outros dados confidenciais que SQL Server o rastreamento foi projetado para eliminar e para ajudar a proteger.
  • Rotinas de análise do SQL Server são detoured para alterar o comportamento. A seguir estão os possíveis efeitos colaterais:
    • Planos de execução não coincidem com o texto de consulta propriamente dita.
    • Um comando é enviado somente uma vez a partir do cliente. No entanto, o comando é executado várias vezes.
    • Saída do rastreamento mostra o comando original em vez da consulta alterada.
    • O comando DBCC INPUTBUFFER mostra o comando original em vez da consulta alterada.
    • A função fn_get_sql mostra dados incorretos. Além disso, a função fn_get_sql é suscetível a exceções e resultados incorretos. A função fn_get_sql é usada por muitas soluções de monitoramento e poderá causar problemas nas soluções de monitoramento.
    • Geral Agendador de modo de usuário (UMS) e o planejamento do sistema operacional de SQL Server (SQLOS) podem ser interrompidos. Isso leva à perda de resposta do SQL Server, alterações de desempenho e paralisações.
  • As APIs do Win32 que fornecem recursos de segurança aprimorados são detoured. Dependendo da implementação, recursos de registro nesse nível podem expor as senhas e outros dados confidenciais. Geral UMS e SQLOS agendamento é interrompido. Isso leva à perda de resposta do SQL Server e a paralisações.
  • Não há suporte para modificar tabelas de função e redirecionando as principais funções do SQL Server ou do Windows API dentro do processo do SQL Server. Isso pode levar à instabilidade e um comportamento inesperado na funcionalidade do SQL Server.
O exemplo a seguir mostra que o kernel32!GetQueuedCompletionStatus função foi detoured.
MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait
O assembly para a função GetQueuedCompletionStatus , a primeira instrução foi substituída com uma instrução 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
O assembly para o código injetado mostra a atividade de detoured e uma chamada para o arquivo 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]

Você pode usar as ferramentas de depuração para Windows para determinar se os desvios estão sendo usados. Para fazer isso, execute as seguintes etapas:

Observação: Sempre teste esse método antes de experimentá-lo em produção. Quando você usa as ferramentas de depuração para Windows, o processo pode congelar quando você executa os comandos. Esse comportamento pode afetar negativamente um servidor de produção.
  1. Anexar o Debugging Tools for Windows para SQL Server ou carregar um arquivo de despejo de memória completo do usuário.
  2. Emita o seguinte comando do depurador. Este comando verifica se cada imagem em relação à imagem em disco para determinar se os desvios tenham sido injetados.
    !for_each_module "!chkimg -v @#Base -d"
  3. Separar o depurador.
Para obter as ferramentas de depuração para Windows, visite o seguinte site da Microsoft:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx (http://www.microsoft.com/whdc/devtools/debugging/default.mspx)
Se a imagem de memória foi alterada, a saída pode ser semelhante ao seguinte:
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)
Você pode revisar o assembly para examinar mais de perto o problema da seguinte forma:
0:038> u ssnetlib!ConnectionClose
ssnetlib!ConnectionClose]:
0c263710 6800000000      push    0
0c263715 e9278ada03      jmp     MyDLL!MyGetQueuedCompletionStatus  <- A detour has been installed.

Programas antivírus que controlam os ataques de injeção de SQL podem detour o código do SQL Server. Nesse cenário, a saída da! for_each_module "! chkimg - v @# Base -d" extensão pode mostrar que o SQL Server funciona yyparse e ex_raise2 são modificados:

Comparison image path: <symbol file path>\sqlservr.exeRange to scan: c81000-3de7d48    ed71a8-ed71ad  6 bytes - sqlservr!yyparse [ ff f5 41 54 41 55:e9 c7 95 5c 76 90 ]1202820-1202824  5 bytes - sqlservr!ex_raise2 (+0x32b678) [ ff f3 57 41 54:e9 20 e0 29 76 ]Total bytes compared: 51801416(17%)Number of errors: 11

Recomendamos que você entre em contato com o provedor dos desvios ou técnicas semelhantes para obter informações detalhadas sobre como ele usa os desvios no SQL Server. Para obter mais informações sobre desvios e técnicas semelhantes, vá para o seguinte site da Microsoft Research Center:
http://Research.microsoft.com/sn/Detours (http://research.microsoft.com/sn/detours/)

A informação contida neste artigo aplica-se 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
  • Microsoft SQL Server 2014 Developer
  • Microsoft SQL Server 2014 Enterprise
  • Microsoft SQL Server 2014 Express
  • Microsoft SQL Server 2014 Standard
  • Microsoft SQL Server 2014 Web
Palavras-chave: 
kbtshoot kbexpertiseadvanced kbinfo kbmt KB920925 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.
Clique aqui para ver a versão em Inglês deste artigo: 920925  (http://support.microsoft.com/kb/920925/en-us/ )
Compartilhar
Opções de suporte adicionais
Fóruns de Suporte do Microsoft Community
Contate-nos diretamente
Localize um parceiro certificado da Microsoft
Microsoft Store