Guida con errore di SQL Server "accesso ad hoc al provider OLE DB 'Microsoft.ACE.OLEDB.12.0'"


8

Quindi abbiamo un problema interessante in cui gli utenti ricevono il seguente errore quando provano a interrogare una vista in SQL Server 2008 R2:

Messaggio 7415, livello 16, stato 1, riga 1 accesso ad hoc al provider OLE DB "Microsoft.ACE.OLEDB.12.0" è stato negato. È necessario accedere a questo provider tramite un server collegato.

Studiando il problema, ho trovato più di un paio di articoli in elenco che apportano modifiche ai parametri OPENROWSET, modifiche al valore del registro, query ad hoc distribuite, ecc. (Collegamenti agli articoli seguenti)

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/

Stiamo ancora ricevendo l'errore dopo aver seguito i passaggi nei link sopra.

L'avvertenza qui è che quando abbiamo creato un account di prova e l'abbiamo dato, è andato tutto bene. I miei colleghi con accesso amministratore possono anche eseguire la query senza problemi.

Questa query viene inviata da un file Excel locale al server che ospita questa istanza.

Qualcuno sa di eventuali altre correzioni per il 2008?

Risposte:


10

Ieri ho avuto lo stesso problema ed ecco come sono riuscito a risolverlo:

Sebbene "Non consentire l'accesso ad hoc" non sia abilitato nella pagina Opzioni provider (SQL Server Management Studio),

inserisci qui la descrizione dell'immagine

il Registro di sistema non ha la chiave DisallowadHocAccess = 0 e per qualche motivo è necessario averla lì.

inserisci qui la descrizione dell'immagine

Dopo aver aggiunto la chiave al registro, sono stato in grado di eseguire la query anche con un utente non amministratore.

inserisci qui la descrizione dell'immagine


8
  1. Determina se "Non consentire l'accesso ad hoc" è abilitato per il tuo provider. Questo può essere trovato in SQL Management Studio tramite il seguente percorso di navigazione:

  2. Oggetti server / server collegati / provider / Microsoft.ACE.OLEDB.12.0

  3. Fare clic con il tasto destro del mouse sul provider "Microsoft.ACE.OLEDB.12.0" e selezionare "Proprietà" dal menu contestuale.

  4. Nella finestra pop-up, assicurati che la casella di controllo "Non consentire l'accesso ad hoc" sia deselezionata.

In alternativa, puoi semplicemente impostarlo su disabilitato utilizzando il seguente SQL:

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

Quindi, verificare che sia impostata la chiave del Registro di sistema. In Regedit, navigare come segue:

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: potresti non avere un nome di istanza se stai utilizzando l'istanza predefinita.

Un'altra nota: puoi copiarlo e incollarlo in un .regfile per impostare la chiave.

Punto chiave : dalla mia esperienza, hai bisogno della chiave di registro solo se l'utente che accede al database non è un utente di tipo amministratore o proprietario. Quindi, gli ambienti ad alta sicurezza avranno bisogno di questa chiave di registro.


Ho pubblicato questa risposta perché l'altra risposta aveva immagini che non riuscivo a vedere perché bloccate sul mio posto di lavoro. Per favore non usare le immagini a meno che non sia assolutamente necessario!
Slogmeister Extraordinaire,

L'aggiunta della chiave di registro ha funzionato per me; tramite la GUI, no.
Tim

0

Per me, assicurati di avere una chiave di registro denominata "DisallowAdhocAccess" valore = 0 in [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQLServer \ MSSQL _. \ Providers \ Microsoft.ACE.OLEDB.12.0] Se non esiste, crealo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.