你目前正处于脱机状态,正在等待 Internet 重新连接

迂回的方式或类似技术与 SQL Server 可能会导致意外的行为

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 920925
概要
Microsoft 支持部门遇到了众多第三方产品用迂回的方式来向 Microsoft SQL Server 中提供其他功能。这些通常审核功能。没有认证进程的第三方迂回的 Microsoft 应用程序的方式。因此,通常情况下,Microsoft 强烈不鼓励使用迂回的方式。

功能,用迂回的方式或类似的技术来更改 SQL Server 的行为可能会导致以下问题:
  • 性能问题
  • 不正确的结果
  • 磁盘和内存损坏
  • 丢失的 SQL Server 的响应
  • 进程意外的终止
  • 不能使用标准的诊断,如fn_get_sql函数和DBCC INPUTBUFFER命令
使用非 Microsoft 软件 (如链接的服务器、 扩展的过程或在 SQL Server 进程内的 COM 对象时,您可能会遇到同样的问题。从 DBA 视图隐藏迂回的方式。要发现 detour,必须使用后面的"更多信息"部分中介绍的技术。链接的服务器、 COM 对象和扩展的过程具有显式注册,并且定义接口。

注意:由于迂回的方式隐藏的性质和缺少的已发布接口,Microsoft 不提供对第三方功能,用迂回的方式或类似的技术支持服务。第三方负责支持其自己的代码,就像它有责任为自己链接服务器或其他认可部署。

它是常见的做法,在常用的故障诊断,Microsoft 支持服务,让您可以禁用不必要的作业以及禁用或删除第三方组件和其他类似的技术课程。Microsoft 始终尝试减少问题的足迹时发现问题。该问题确定为后与第三方产品的作业无关,这些作业或第三方产品可能会引入回生产。

它不是我们想要发现 detour,然后考虑来不受支持的 SQL Server 的实例。Microsoft 承认某些实现中是有必要的。但是,Microsoft 要求您验证支持性迂回的方式。来自著名和受信任公司 detour 与所使用的病毒意外 detour 肯定不同。Microsoft 不保证,也不保证这些第三方产品或与 Microsoft 产品和服务的第三方产品的交互方式。相反,第三方供应商负责的标识和可信赖的他们的产品和服务。如果您有任何有关第三方产品和服务的问题,请访问相应的第三方的。Microsoft 不承担任何责任的任何问题,由第三方产品或与 SQL Server 服务的使用。
更多信息
迂回的方式提供了增强的功能和风险/回报权衡。通常情况下,当在 SQL Server 中实现 detour 时,第三方代码被注入进程空间。此活动可能会更改 SQL Server 的行为。

下面是一些示例情况和可能的副作用:
  • 扫描并更改传入网络流量 (TDS) 数据包。在 net_readdata 网络进程线程的某个关键位置添加 detour。甚至 100 个 CPU 周期,在此位置可显著地减少批处理吞吐率。

    在实际的 TDS 数据中的更改可能会导致内存 scribblers。此问题已触发各种 SQL Server 稳定性问题,并在数据损坏。问题可能会导致部分更改,并重播到 SQL Server 的垃圾回收的 TDS 数据包。记录在此级别的设备可能会使密码和其他敏感数据跟踪旨在禁止并帮助保护该 SQL Server。
  • SQL Server 分析例程被 detoured 更改行为。可能的副作用如下:
    • 执行计划与实际的查询文本不匹配。
    • 一次只能从客户端提交命令。但是,该命令将执行多次。
    • 跟踪输出显示原始命令而不是更改后的查询。
    • DBCC INPUTBUFFER 命令显示原始命令而不是更改后的查询。
    • Fn_get_sql函数显示不正确的数据。此外, fn_get_sql函数是容易到异常和不正确的结果。Fn_get_sql函数由许多监控解决方案和监视解决方案可能会造成问题。
    • 整体用户模式计划 (UMS) 和 SQL Server 操作系统 (SQLOS) 计划可能会中断。这就导致 SQL Server 的响应的丢失、 性能变化和停机。
  • Win32 Api,提供了增强的安全功能被 detoured。根据实现,在此级别的日志记录工具可能暴露的密码和其他敏感数据。整体 UMS 和 SQLOS 计划被中断。这样就可以对 SQL Server 的响应的丢失和中断。
  • 修改函数表和重定向核心 SQL Server 功能或 Windows API 不支持 SQL Server 进程内。在 SQL Server 功能,这可能导致不稳定和意外的行为。
下面的示例演示kernel32!GetQueuedCompletionStatus被 detoured 函数。
MyDLL!MyGetQueuedCompletionStatusssnetlib!ConnectionReadAsyncWait
GetQueuedCompletionStatus函数的程序集,通过跳转指令已更换的第一个指令。
0:038> u kernel32!GetQueuedCompletionStatuskernel32!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
插入的代码的程序集显示 detoured 的活动和对 MyDLL 文件的调用。
0:038> u 21e70000  21e70000 55              push    ebp21e70001 8bec            mov     ebp,esp21e70003 51              push    ecx21e70004 8b4518          mov     eax,dword ptr [ebp+18h]21e70007 50              push    eax21e70008 8b4d14          mov     ecx,dword ptr [ebp+14h]21e7000b 51              push    ecx21e7000c 8b5510          mov     edx,dword ptr [ebp+10h]21e7000f 52              push    edx21e70010 8b450c          mov     eax,dword ptr [ebp+0Ch]21e70013 50              push    eax21e70014 8b4d08          mov     ecx,dword ptr [ebp+8]21e70017 51              push    ecx21e70018 e8234d19ee      call   MyDLL+0x4d40 (10004d40)   <- Call to the MyDLL file.21e7001d 8945fc          mov     dword ptr [ebp-4],eax21e70020 8b55fc          mov     edx,dword ptr [ebp-4]

您可以使用 Windows 调试工具来确定是否正在使用迂回的方式。若要执行此操作,请执行以下步骤。

注意:一定要测试此方法在尝试在生产环境中之前。当您使用 Windows 调试工具时,当您运行命令时,可能会冻结过程。这种行为可能会影响生产服务器。
  1. 将 Windows 调试工具附加到 SQL Server 或加载完整用户转储文件。
  2. 发出下面的调试器命令。此命令会检查每个图像相对于磁盘上的图像,以确定是否已插入了迂回的方式。
    !for_each_module "!chkimg -v @#Base -d"
  3. 分离调试程序。
要获取 Windows 调试工具,请访问下面的 Microsoft 网站: 如果在内存中的映像已被更改,则输出可能如下所示:
Comparison image path: c:\program files\microsoft sql server\mssql\binn\ssnetlib.dll\ssnetlib.dllScanning section:    .textSize: 56488Range to scan: 0c261000-0c26eca80c263710-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: 3333 errors : 0c260000 (0c263710-0c26516a)
您可以查看程序集要仔细看问题,如下所示:
0:038> u ssnetlib!ConnectionClosessnetlib!ConnectionClose]:0c263710 6800000000      push    00c263715 e9278ada03      jmp     MyDLL!MyGetQueuedCompletionStatus  <- A detour has been installed.

跟踪 SQL 注入攻击的防病毒程序可以弯子 — 我们 SQL Server 代码。在这种情况下,输出的! for_each_module"! chkimg-v @# Base-d"扩展可能会显示 SQL Server 功能的yyparseex_raise2被修改:

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

我们建议您联系迂回的方式或类似技术的提供商,有关如何在 SQL Server 中使用迂回的方式的详细信息。迂回的方式和类似的技术有关的详细信息,请转到下面的 Microsoft 研究中心网站:

警告:本文已自动翻译

属性

文章 ID:920925 - 上次审阅时间:03/20/2015 22:20:00 - 修订版本: 4.0

Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Express Edition with Advanced Services, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL 2005 Server Workgroup, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise, 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 标准版, 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

  • kbtshoot kbexpertiseadvanced kbinfo kbmt KB920925 KbMtzh
反馈