当访问链接的服务器获取 7399 和 7300 错误消息

适用于: Windows Vista UltimateWindows Vista Enterprise 64-bit editionHyper-V Server 2008

症状


请考虑以下情况:
  • 您必须运行 Windows Vista 或更高版本的操作系统的系统安装的 SQL Server 实例。
  • 此 SQL Server 实例上配置链接的服务器与 OLEDB 数据源使用 OLEDB 提供程序为数据源。
  • OLEDB 提供程序配置 SQL Server 进程之外进行实例化。这通常是大多数 OLEDB 提供者除 SQL 本机客户端的默认值。这可以由进程内允许选项,可以在 SQL Server 管理 Studio 中使用的提供程序的属性设置来控制。
  • 链接的服务器安全配置为使用进行登录的当前安全上下文使用选项。
在这种情况下,如果非特权用户登录到 SQL Server 实例使用 Windows 身份验证,并尝试访问链接的服务器,它们会遇到类似于下面的错误消息:
Msg 7399,级别 16 状态 1 行 1 此 OLE DB 访问接口 < OLEDB 提供程序名称 > 链接服务器 < 链接服务器名称 > 报告了一个错误。提供程序未给出有关该错误的任何信息。Msg 7330,级别 16 状态 2 行 1Cannot 从链接服务器的 OLE DB 提供程序 < OLEDB 提供程序名称 > 提取行。
注意: 在此上下文中的非特权用户是不属于 Windows 级别的访问权限的组的标准用户 (例如: 管理员)

原因


当一个 OLE DB 提供程序在进程外运行时,OLE DB 接口远程处理 Dll (msdaps.dll) 处理代理方过程中,OLE DB 使用者所在与 OLE DB 提供程序所驻留的存根 (stub) 侧过程之间的通信。在当前的实现中。OLE DB 远程处理使用指定的文件映射对象传输 OLE DB 行集数据。在系统上运行 Vista 或更高版本的操作系统,代理服务器端和存根 (stub) 端运行在不同的会话会话 0 隔离并因此 OLE DB 远程处理必须使用全局在这些系统上的代理存根 (stub) 通信。但是,因为用户帐户没有足够的权限来创建指定的链接的服务器配置中的全局文件映射对象,代理存根通信无法启动导致症状所述的错误消息这篇文章的一部分。

解决方法


可以变通解决此问题,使用下列方法之一:解决办法 1: 配置 OLEDB 提供程序在进程内运行。注意: 不能使用 OLEDB 提供程序基于.Net 版本早于 4.0 此替代方法。解决方法 2: 将"创建全局对象"用户权限的用户。若要执行此操作,请执行以下步骤:
  1. 单击开始,指向管理工具,然后单击本地安全策略
  2. 展开本地策略,然后单击用户权利指派
  3. 在右窗格中,双击创建全局对象
  4. 本地安全策略设置对话框中,单击添加
  5. 选择用户或组对话框中,单击您想要添加,单击添加,然后单击确定的用户帐户。
  6. 单击“确定”
状态: Microsoft 当前从事产品的未来版本中修复此问题。