Ayuda con error de SQL Server "acceso ad hoc al proveedor OLE DB 'Microsoft.ACE.OLEDB.12.0'"

8

Por lo tanto, tenemos un problema interesante en el que los usuarios reciben el siguiente error al intentar consultar una vista en SQL Server 2008 R2:

Mensaje 7415, Nivel 16, Estado 1, Línea 1 Se ha denegado el acceso ad hoc al proveedor OLE DB 'Microsoft.ACE.OLEDB.12.0'. Debe acceder a este proveedor a través de un servidor vinculado.

Al investigar el problema, he encontrado más de unos pocos artículos que enumeran cambios en los parámetros de OPENROWSET, cambios en el valor del registro, consultas distribuidas de AdHoc, etc. (enlaces a los artículos a continuación)

http://www.johnsoer.com/blog/?p=538

http://www.remotedbaexperts.com/Blog/dba_tips/2010/09/ad-hoc-access-to-ole-db-provider-microsoft-ace-oledb-12-0-has-been-denied/

Seguimos recibiendo el error después de seguir los pasos en los enlaces anteriores.

La advertencia aquí es que cuando creamos una cuenta de prueba y le dimos sa, funcionó bien. Mis colegas con acceso de administrador también pueden ejecutar la consulta sin ningún problema.

Esta consulta se alimenta desde un archivo de Excel local al servidor que aloja esta instancia.

¿Alguien sabe de alguna otra solución para 2008?

Johnny-boy
fuente

Respuestas:

10

Acabo de tener el mismo problema ayer, y así es como pude resolverlo:

Aunque "No permitir acceso adhoc" no está habilitado en la página Opciones de proveedor (SQL Server Management Studio),

ingrese la descripción de la imagen aquí

el Registro no tiene la clave DisallowadHocAccess = 0, y por alguna razón se requiere tenerla allí.

ingrese la descripción de la imagen aquí

Después de agregar la clave al registro, también pude ejecutar la consulta con un usuario no administrador.

ingrese la descripción de la imagen aquí

NTom
fuente
8
  1. Determine si "No permitir acceso adhoc" está habilitado para su proveedor. Esto se puede encontrar en SQL Management Studio a través de la siguiente ruta de navegación:

  2. Objetos de servidor / Servidores vinculados / Proveedores / Microsoft.ACE.OLEDB.12.0

  3. Haga clic derecho en el proveedor "Microsoft.ACE.OLEDB.12.0" y seleccione "Propiedades" en el menú contextual.

  4. En la ventana emergente, asegúrese de que la casilla "No permitir acceso adhoc" esté desactivada.

Alternativamente, puede configurarlo como deshabilitado utilizando el siguiente SQL:

sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE

Luego, verifique que la clave del Registro esté establecida. En Regedit, navegue de la siguiente manera:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQLServer\MSSQL<major version>_<minor version>.<instance name>\Providers\Microsoft.ACE.OLEDB.12.0]
"DisallowAdhocAccess"=dword:00000000

Nota: es posible que no tenga un nombre de instancia si está utilizando la instancia predeterminada.

Otra nota: puede copiar y pegar eso en un .regarchivo para configurar la clave.

Punto clave : desde mi experiencia, solo necesita la clave de registro si el usuario que accede a la base de datos no es un usuario de tipo administrador o propietario. Por lo tanto, los entornos de alta seguridad necesitarán esta clave de registro.

Slogmeister Extraordinaire
fuente
Publiqué esta respuesta porque la otra respuesta tenía imágenes que no podía ver porque están bloqueadas en mi lugar de trabajo. ¡No utilices imágenes a menos que sea absolutamente necesario!
Slogmeister Extraordinaire
Agregar la clave de registro funcionó para mí; a través de la GUI, no.
Tim
0

Para mí, asegúrese de tener una clave de registro llamada "DisallowAdhocAccess" valor = 0 en [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQLServer \ MSSQL _. \ Providers \ Microsoft.ACE.OLEDB.12.0] Si no existe, créelo.

Hoang Tran
fuente