Ajuda com o erro do SQL Server "acesso ad hoc ao provedor OLE DB 'Microsoft.ACE.OLEDB.12.0'"

8

Portanto, temos um problema interessante em que os usuários estão recebendo o seguinte erro ao tentar consultar uma exibição no SQL Server 2008 R2:

Msg 7415, nível 16, estado 1, linha 1 Acesso ad hoc ao provedor OLE DB 'Microsoft.ACE.OLEDB.12.0' foi negado. Você deve acessar esse provedor por meio de um servidor vinculado.

Pesquisando o problema, encontrei mais de alguns artigos listando alterações nos parâmetros OPENROWSET, alterações no valor do registro, consultas distribuídas no AdHoc etc. (Links para artigos abaixo)

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/

Ainda estamos recebendo o erro após seguir as etapas nos links acima.

A ressalva aqui é que, quando criamos uma conta de teste e a saímos - ela funcionou perfeitamente. Meus colegas com acesso de administrador também podem executar a consulta sem problemas.

Esta consulta está sendo alimentada de um arquivo excel local para o servidor que hospeda esta instância.

Alguém sabe de outras correções para 2008?

Johnny Boy
fonte

Respostas:

10

Acabei de ter o mesmo problema ontem e aqui está como consegui resolvê-lo:

Embora a opção "Proibir acesso adhoc" não esteja ativada na página Opções do Provedor (SQL Server Management Studio),

insira a descrição da imagem aqui

o registro não possui a chave DisallowadHocAccess = 0 e, por algum motivo, é necessário tê-la lá.

insira a descrição da imagem aqui

Depois de adicionar a chave ao registro, eu também pude executar a Consulta com um usuário não administrador.

insira a descrição da imagem aqui

NTom
fonte
8
  1. Determine se "Proibir acesso adhoc" está ativado para o seu provedor. Isso pode ser encontrado no SQL Management Studio através do seguinte caminho de navegação:

  2. Objetos de servidor / servidores vinculados / provedores / Microsoft.ACE.OLEDB.12.0

  3. Clique com o botão direito do mouse no provedor "Microsoft.ACE.OLEDB.12.0" e selecione "Propriedades" no menu de contexto.

  4. Na janela pop-up, verifique se a caixa de seleção "Proibir acesso adhoc" está desmarcada.

Como alternativa, você pode configurá-lo como desativado usando o seguinte SQL:

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

Em seguida, verifique se a chave do Registro está definida. No Regedit, navegue da seguinte maneira:

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: Você pode não ter um nome de instância se estiver usando a instância padrão.

Outra nota: Você pode copiar e colar isso em um .regarquivo para definir a chave.

Ponto principal : Pela minha experiência, você só precisará da chave do Registro se o usuário que acessa o banco de dados não for um usuário do tipo administrador ou proprietário. Portanto, ambientes de alta segurança precisarão dessa chave do Registro.

Slogmeister Extraordinaire
fonte
Postei essa resposta porque a outra tinha imagens que não pude ver porque estão bloqueadas no meu local de trabalho. Por favor, não use imagens, a menos que seja absolutamente necessário!
Slogmeister Extraordinaire
Adicionar a chave do registro funcionou para mim; via GUI, não.
Tim
0

Para mim, verifique se você possui uma chave de registro denominada "DisallowAdhocAccess" value = 0 em [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQLServer \ MSSQL _. \ Providers \ Microsoft.ACE.OLEDB.12.0] Se não existir, crie-a.

Hoang Tran
fonte