Obtener mensajes de error 7399 y 7300 al tener acceso a un servidor vinculado

Se aplica a: Windows Vista UltimateWindows Vista Enterprise 64-bit editionHyper-V Server 2008

Síntomas


Imagine la siguiente situación:
  • Tener una instancia de SQL Server que está instalada en un sistema que está ejecutando Windows Vista o un sistema operativo posterior.
  • En esta instancia de SQL Server, se configura un servidor vinculado a un origen de datos OLE DB mediante un proveedor OLE DB para el origen de datos.
  • El proveedor de OLE DB está configurado para crear instancias fuera del proceso de SQL Server. Suele ser el valor predeterminado para la mayoría de los proveedores OLEDB excepto SQL Native Client. Esto puede controlarse mediante la opción Permitir inprocess que puede establecerse mediante las propiedades del proveedor de SQL Server Management Studio.
  • La seguridad del servidor vinculado está configurada para utilizar el realizarse utilizando el contexto de seguridad actual del inicio de sesión opción.
En este escenario, si inicia la sesión un usuario sin privilegios en el SQL Server instancia utilizando la autenticación de Windows e intenta tener acceso al servidor vinculado, que experimentarán un mensaje de error similar al siguiente:
Msj 7399, nivel 16, estado 1, el proveedor de OLE DB 1El línea < nombre del proveedor OLEDB > para el servidor vinculado < nombre del servidor vinculado > notificó un error. El proveedor no dio información sobre el error. Msj 7330, nivel 16, estado 2, línea 1Cannot recuperar una fila del proveedor OLE DB < nombre del proveedor OLEDB > para el servidor vinculado.
Nota: En este contexto de un usuario sin privilegios es un usuario estándar que no pertenece a un grupo de acceso privilegiado a nivel de Windows (por ejemplo: los administradores)

Causa


Cuando un proveedor OLE DB se ejecuta fuera de proceso, el OLE DB interfaz Remoting archivo Dll (msdaps.dll) controla la comunicación entre el proxy lado proceso, en el que reside el consumidor de OLE DB y el código auxiliar lado, en el que reside el proveedor OLE DB. En la implementación actual. Remoto de OLE DB utiliza objetos de asignación de nombre de archivo para transmitir datos de conjunto de filas de OLE DB. En sistemas que ejecutan Vista o una versión posterior del sistema operativo, la la parte de código auxiliar y proxy se ejecutan en distintas sesiones a causa del aislamiento de la sesión 0 y, por tanto, debe utilizar Remoting OLE DB global para la comunicación de proxy-stub en estos sistemas. Sin embargo, dado que la cuenta de usuario no tiene privilegios suficientes para crear un objeto de asignación de archivo global en la configuración de servidor vinculado especificado, la comunicación entre el proxy-stub no puede iniciarse dando como resultado mensajes de error descritos en la sección Síntomas sección de este artículo.

Solución alternativa


Puede solucionar el problema mediante uno de los métodos siguientes:método alternativo 1: configurar el proveedor OLEDB para ejecutarla en proceso. Nota: No puede utilizar esta solución para proveedores de OLEDB que se basan en versiones de .net anteriores a 4.0. Solución 2: asignar a los usuarios el derecho de usuario "Crear objetos globales". Para ello, siga estos pasos:
  1. Haga clic en Inicio, seleccione Herramientas administrativasy, a continuación, haga clic en Directiva de seguridad Local.
  2. Expanda Directivas localesy, a continuación, haga clic en Asignación de derechos de usuario.
  3. En el panel derecho, haga doble clic en crear objetos globales.
  4. En el cuadro de diálogo Configuración de seguridad local , haga clic en Agregar.
  5. En el cuadro de diálogo Seleccionar usuarios o grupos , haga clic en las cuentas de usuario que desea agregar, haga clic en Agregary, a continuación, haga clic en Aceptar.
  6. Haga clic en Aceptar.
Estado: Microsoft está trabajando actualmente en la corrección de este problema en una futura versión del producto.