SQL Server 2008 R2 (x86) e o mecanismo de acesso

3

Tudo,

Eu configurei o Mecanismo de Banco de Dados do Access para o SQL Server 2008 R2 (Service Pack 1) em muitas máquinas que executam o x64 Windows 7 sem problemas de execução como 'Administrador' (e configuração do SQL Server como 'sa'). Eu também instalei o Mecanismo de Banco de Dados do Access em uma máquina baseada em x86 executando o Windows 7 e o SQL Server 2008 R2 Express Edition (x86) novamente sem problemas. No entanto, quando eu tentar configurar o mecanismo de banco de dados do Access usando o Developer Edition do SQL Server 2008 R2 em x86 Windows 7 ele não funciona! Funciona para o Express, mas não para o Developer. Eu tentei uma reinstalação completa do SQL, mas ainda não funciona, jogando o seguinte erro:

OLE DB provider "Microsoft.Ace.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error". 
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.Ace.OLEDB.12.0" for linked server "(null)".

A informação da máquina é (obtida a partir da linha de comando executando 'systeminfo'):

OS Name:              Microsoft Windows 7 Professional
OS Version:           6.1.7601 Service Pack 1 Build 7601
OS Configuration:     Standalone workstation
System Type:          X86-based PC
Processor(s):         1 Processor(s) Installed. 
                      [01]: x64 Family 6 Model 42 Stepping 7 GenuineIntel ~2501Mhz

Para configurar o Access Engine tendo instalado com sucesso a versão de 32 bits, entro no estúdio de gerenciamento e executo as seguintes consultas:

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
GO

-- Then each of the following separately.
EXEC sp_configure 'show advanced options',1
reconfigure
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure

Uma das consultas que normalmente executo para estabelecer se o Servidor Vinculado está configurado corretamente é:

SELECT * FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'J:\Data\thisDir\thatDir\someAccessFile.mdb'; 'admin';'',thisTable);
GO

Esse processo funciona para todas as configurações, incluindo o SQL Express 2008 R2 (x86 e x64) com os Mecanismos de Banco de Dados do Access (x86 e x64, respectivamente), mas para o Developer Edition no x86 Windows 7 não, por quê?

Alguém se deparou com isso que pode me oferecer alguns conselhos sobre como resolver esse problema?

Muito obrigado pelo seu tempo.

    
por MoonKnight 01.12.2011 / 04:12

2 respostas

1

Em este post o problema eram as permissões na pasta Temp:

My solution was to log into the server once using the service account for SQL Server. Everything worked immediately thereafter, and I replicated this on a second server.

I read elsewhere that the Ace and Jet engines both require access to the Temp folders to do their work. I suspect logging in once was necessary to “wire-up” access to the Temp folder.

    
por 09.01.2012 / 08:13
1

Isso está acontecendo devido às permissões na pasta 'Serviço de Rede' que o SQL Server usa para a configuração do Servidor Vinculado. Para acessar o servidor vinculado usando outra conta (supondo que você tenha as permissões de servidor configuradas corretamente), será necessário fazer o seguinte:

Abra o Windows Explorer e navegue até a seguinte pasta (siga as próximas etapas com cuidado, pois agora você está lidando com arquivos do sistema) "C: \ Windows \ ServiceProfiles \ NetworkService \ AppData \ Local". Este diretório contém uma pasta chamada "Temp", clique com o botão direito e selecione "Propriedades". Na caixa de diálogo a seguir, clique na guia "Segurança". Se você puder ver a conta de usuário padrão que deseja configurar para usar o Mecanismo de Banco de Dados do Access, isso significa que ela já tem alguns privilégios nessa pasta, se ela não estiver na lista 'Grupo de nomes de usuário:', ser adicionado. De qualquer forma, clique no botão "Editar…" abaixo da lista "Grupo de nomes de usuários:" para iniciar a caixa de diálogo "Permissões para temp". Se você precisar adicionar o Usuário padrão ao grupo de permissões, use o botão "Adicionar ...", certificando-se de que o nome da conta esteja escrito corretamente na caixa de diálogo "Selecionar usuários ou grupos". Quando o usuário padrão estiver na lista de permissões, selecione esse usuário e, no menu de seleção "Permissões para usuário padrão", marque a caixa "Controle total" na coluna "Permitir". Clique OK; clique novamente em OK para sair deste menu.

Agora você deve poder executar as consultas de acesso como qualquer usuário para o qual você conceda permissões.

Você também precisará certificar-se de ter executado as seguintes consultas no Management Studio para configurar corretamente o Mecanismo de Acesso

-- These can be run as one batch.
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', 
    'DynamicParameters', 1 
GO

-- Run each of the following queries individually.
EXEC sp_configure 'show advanced options',1
reconfigure
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
Reconfigure

Espero que isso ajude.

    
por 16.04.2012 / 19:19