Hilfe bei SQL Server-Fehler "Ad-hoc-Zugriff auf OLE DB-Anbieter 'Microsoft.ACE.OLEDB.12.0'"

8

Wir haben also ein interessantes Problem, bei dem Benutzer beim Versuch, eine Ansicht in SQL Server 2008 R2 abzufragen, den folgenden Fehler erhalten:

Nachricht 7415, Ebene 16, Status 1, Zeile 1 Der Ad-hoc-Zugriff auf den OLE DB-Anbieter 'Microsoft.ACE.OLEDB.12.0' wurde verweigert. Sie müssen über einen Verbindungsserver auf diesen Anbieter zugreifen.

Bei der Untersuchung des Problems habe ich mehr als ein paar Artikel gefunden, in denen Änderungen an den OPENROWSET-Parametern, Änderungen des Registrierungswerts, AdHoc DIstributed Queries usw. aufgeführt sind. (Links zu den folgenden Artikeln)

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/

Wir erhalten weiterhin den Fehler, nachdem wir die Schritte in den obigen Links ausgeführt haben.

Die Einschränkung hier ist, dass, als wir ein Testkonto erstellt und es sa gegeben haben, es gut lief. Meine Kollegen mit Administratorzugriff können die Abfrage auch problemlos ausführen.

Diese Abfrage wird von einer lokalen Excel-Datei an den Server weitergeleitet, auf dem sich diese Instanz befindet.

Kennt jemand andere Korrekturen für 2008?

Johnny-Junge
quelle

Antworten:

10

Ich hatte gestern das gleiche Problem und hier ist, wie ich es lösen konnte:

Obwohl "Ad-hoc-Zugriff nicht zulassen" auf der Seite "Anbieteroptionen" (SQL Server Management Studio) nicht aktiviert ist,

Geben Sie hier die Bildbeschreibung ein

Die Registrierung verfügt nicht über den Schlüssel DisallowadHocAccess = 0, und aus irgendeinem Grund muss er dort vorhanden sein.

Geben Sie hier die Bildbeschreibung ein

Nachdem ich den Schlüssel zur Registrierung hinzugefügt hatte, konnte ich die Abfrage auch mit einem Benutzer ausführen, der kein Administrator ist.

Geben Sie hier die Bildbeschreibung ein

NTom
quelle
8
  1. Stellen Sie fest, ob für Ihren Provider "Ad-hoc-Zugriff nicht zulassen" aktiviert ist. Dies kann in SQL Management Studio über den folgenden Navigationspfad gefunden werden:

  2. Serverobjekte / Verbindungsserver / Anbieter / Microsoft.ACE.OLEDB.12.0

  3. Klicken Sie mit der rechten Maustaste auf den Anbieter "Microsoft.ACE.OLEDB.12.0" und wählen Sie "Eigenschaften" aus dem Kontextmenü.

  4. Stellen Sie im Popup-Fenster sicher, dass das Kontrollkästchen "Ad-hoc-Zugriff nicht zulassen" deaktiviert ist.

Alternativ können Sie es einfach mithilfe der folgenden SQL auf deaktiviert setzen:

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

Stellen Sie als Nächstes sicher, dass der Registrierungsschlüssel festgelegt ist. Navigieren Sie in Regedit wie folgt:

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

Hinweis: Wenn Sie die Standardinstanz verwenden, haben Sie möglicherweise keinen Instanznamen.

Noch ein Hinweis: Sie können das kopieren und in eine .regDatei einfügen, um den Schlüssel festzulegen.

Schlüsselpunkt : Nach meiner Erfahrung benötigen Sie den Registrierungsschlüssel nur, wenn der Benutzer, der auf die Datenbank zugreift, kein Benutzer vom Typ Administrator oder Eigentümer ist. Hochsicherheitsumgebungen benötigen diesen Registrierungsschlüssel.

Slogmeister Extraordinaire
quelle
Ich habe diese Antwort gepostet, weil die andere Antwort Bilder enthielt, die ich nicht sehen konnte, weil sie an meinem Arbeitsplatz blockiert sind. Bitte verwenden Sie keine Bilder, es sei denn, Sie müssen unbedingt!
Slogmeister Extraordinaire
Das Hinzufügen des Registrierungsschlüssels hat bei mir funktioniert. über die GUI nicht.
Tim
0

Stellen Sie für mich sicher, dass Sie unter [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQLServer \ MSSQL _. \ Providers \ Microsoft.ACE.OLEDB.12.0] einen Registrierungsschlüssel mit dem Namen "DisallowAdhocAccess" = 0 haben. Wenn dieser nicht vorhanden ist, erstellen Sie ihn.

Hoang Tran
quelle