Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 По сети не работает чтение из Excel в SQL Server x64 (только при Windows authentication)  [new]
Андрей Усачёв
Member

Откуда: Рига, Латвия
Сообщений: 128
Требуется линковать файлы Excel к обычным таблицам SQL-сервера примерно так:

select * from
openrowset('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=\\server\share\file.xls', 'SELECT * FROM [Sheet1$]') as X
inner join Table1 on X.Field1 = Table1.Field1


Она почти выполнена. Для этого я проделал следующие действия:

1) На свежем SQL Server 2008 R2 x64 Установил Microsoft Access Database Engine 2010 Redistributable x64.

2) Выполнил:
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

3) Выполнил:
USE [master]
GO
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
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'NestedQueries', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'NonTransactedUpdates', 1
GO

4) Вручную прописал значение в реестре:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\{тут правильное название сервиса}\Providers\Microsoft.ACE.OLEDB.12.0]
"DisallowAdHocAccess"=dword:00000000

После этого работает только в 3 комбинациях из 4:

Файл локальный Файл удалённый
Аутентификация SQL-сервера Работает Работает
Аутентификация Windows Работает Не работает!

Читать пытаюсь так так:

select * from openrowset('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=\\server\share\file.xls', 'SELECT * FROM [Sheet1$]')

Я являюсь админом:
1) Домена,
2) Машины, на которой работает SQL-сервер,
3) Машины, где расположен файл Excel (\\server).

При этом у меня есть все права на каталог TEMP того пользователя, из-под которого работает SQL-Server:
exec master..xp_cmdshell 'echo hello > %TEMP%\hello.txt'
exec master..xp_cmdshell 'dir %TEMP%'

Вижу файл Directory of C:\Users\{пользователь, из-под которого работает SQL Server}\AppData\Local\Temp\hello.txt.

Также есть права на запись в каталог, где лежит файл Excel:
exec master..xp_cmdshell 'echo hello > \\server\share\hello.txt'
exec master..xp_cmdshell 'dir \\server\share\'

Вижу файл \\server\share\hello.txt.

Если копирую файл file.xls локально (например, в C:\TEMP\, на который есть все права у всех), то из него читаются данные всегда (и при аутентификации Windows, и при аутентификации SQL Server). Если логинюсь с аутентификацией SQL Servers (пользователь абсолютно бесправный), то данные опять читаются всегда (и с локального диска, и с удалённой шары).

А в случае удалённой шары и Windows Authentication -- нет.
Где-то читал, что надо настроить Kerberos Delegation, но как?
2 мар 15, 15:05    [17332075]     Ответить | Цитировать Сообщить модератору
 Re: По сети не работает чтение из Excel в SQL Server x64 (только при Windows authentication)  [new]
Glory
Member

Откуда:
Сообщений: 104760
http://www.excel-sql-server.com/excel-import-to-sql-server-using-distributed-queries.htm
2 мар 15, 15:30    [17332260]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить