xp_cmdshell произошла сетевая ошибка

Я перемещаю базу данных SQL со своего C:\ на сервер, и я немного новичок в этом. Я использую Openrowset и Opendatasource для получения данных из файлов Excel, Access и CSV, но теперь это работает только с фиксированным диском (C:\ или E:). Я пытаюсь использовать xp_CmdShell для подключения диска, и вот что я получаю:

Сначала я запустил это:

exec sp_configure 'xp_cmdshell', 1; 
reconfigure

Тогда это:

exec xp_cmdshell 'net use G: \\172.16.0.32\Finance'

и получил

Команда выполнена успешно. НОЛЬ НОЛЬ

Затем я запускаю:

exec xp_cmdshell 'net use'

и получить:

Новые связи запомнятся. NULL Статус NULL Локальный
Удаленная сеть NULL ---------------------------------------- --------------------------------------- OK G: \172.16.0.32\Финансы Microsoft Windows Сеть Команда выполнена успешно. НОЛЬ НОЛЬ

Но я запускаю это и получаю ошибку:

exec xp_cmdshell 'Dir G:'

Произошла непредвиденная ошибка сети. НУЛЕВОЙ

Если кто-то может помочь, это будет огромно!

Обновление: я удалил диск и переназначил его, перезагрузил сервер и перезапустил службу.

exec xp_cmdshell 'чистое использование G: /delete' exec xp_cmdshell 'чистое использование G: \172.16.0.32\Finance'

Затем я получил это:

exec xp_cmdshell 'Dir G:' 

Том на диске G — FileSharing1. Серийный номер тома — 20E1-DEF3 NULL Каталог G:\ NULL 22.06.2017 08:56 . 22.06.2017 08:56 .. 20.09.2017 09:37
Отчеты об использовании IMA 09.03.2017 18:36
Microsotf SQL Server 2014 15.02.2017 06:22 PM
Проект Wellcare-Apixio 0 файлов 0 байт 5 каталогов 722 791 567 360 байтов свободно NULL

После всего этого мой OPENROWSET Query все еще не работает


person anonymous    schedule 31.10.2017    source источник
comment
Вы пытались запустить это в командной строке? Это исключило бы, что это имеет какое-либо отношение к SQL Server, если оно там не работает.   -  person SQLChao    schedule 31.10.2017
comment
Хорошая идея. Я попытался, и команда завершилась успешно, я перезапустил службу, но она все еще не работала. Любые другие идеи?   -  person anonymous    schedule 31.10.2017
comment
Теперь ошибка Система не может найти указанный путь.   -  person anonymous    schedule 31.10.2017
comment
Проблема с разрешениями?   -  person SQLChao    schedule 31.10.2017
comment
Я много раз проверял ИТ-отдел, они говорили мне, что я администратор и имею доступ для чтения/записи.   -  person anonymous    schedule 31.10.2017
comment
Вы подключаетесь к SQL Server, используя учетную запись SQL (логин/пароль) или используя учетную запись Windows?   -  person kirchner    schedule 31.10.2017
comment
Я пробовал оба. Я использовал аутентификацию Windows и аутентификацию SQL Server с учетной записью sa. Я собираюсь опубликовать обновление   -  person anonymous    schedule 31.10.2017


Ответы (1)


Я считаю, что у вас есть проблема с разрешением следующим образом:

Когда вы устанавливаете SQL Server, вам будет предложено настроить учетную запись ОС, под которой будет работать служба SQL Server. Если этот параметр не изменен, вы работаете с учетной записью по умолчанию, а среднее значение учетной записи по умолчанию в этом контексте немного изменилось в последних версиях.

В последних версиях (2016/2017) это означает, что ваша служба будет работать со специальной учетной записью службы, которая названа в честь имени службы. На моей машине разработки служба называется MSSQL$DEV, поэтому моя служба работает под учетной записью «NT Service\MSSQL$DEV». Если ваша служба 2008 года или новее, вы можете запросить sys.dm_server_services, чтобы узнать, о какой учетной записи идет речь. Там есть столбец под названием service_account.

Дело в том, что эти сервисные учетные записи обычно не имеют доступа к сети. Поэтому в вашем случае SQL Server может не иметь доступа к общему ресурсу \\172.16.0.32\Finance.

Теперь вы упоминаете xp_cmdshell. Возможно, вы сможете заставить xp_cmdshell работать, настроив прокси-аккаунт, но я считаю, что ваша конечная цель — получить доступ к удаленным данным с помощью OPENROWSET и тому подобного. И прокси-аккаунт для xp_cmdshell не годится для OPENROWSET.

Так что ты можешь сделать? Когда вы подключаетесь к SQL Server с помощью проверки подлинности Windows, SQL Server обычно пытается выдать себя за вас при доступе к внешним ресурсам, таким как файлы и общие сетевые ресурсы. Возможно, вам потребуется настроить делегирование Kerberos и тому подобное, но это, безусловно, работает.

Если вы подключаетесь к SQL Server с помощью учетной записи SQL (логин/пароль) или не можете заставить работать делегирование, другим вариантом является изменение учетной записи, под которой работает SQL Server, на учетную запись домена, имеющую разрешения на доступ к общим ресурсам и файлам. тебе нужно. Не используйте администратора домена, только обычную учетную запись домена. Лучший способ изменить учетную запись службы — использовать Диспетчер конфигурации SQL Server.

Надеюсь, поможет.

person kirchner    schedule 31.10.2017
comment
Спасибо, что потратили время на это. Я попробую. - person anonymous; 01.11.2017
comment
Какая учетная запись является учетной записью домена? - person anonymous; 01.11.2017
comment
@anonymous Обычно это учетная запись домена, созданная для запуска службы SQL Server. Вы можете проверить свои службы, чтобы увидеть, под чем они в настоящее время работают. - person SQLChao; 01.11.2017
comment
Я настроил делегирование Kerberos, и оно работает, но только под учетной записью sa с использованием аутентификации SQL-сервера. Знаете ли вы, как я могу заставить его работать с помощью проверки подлинности Windows? - person anonymous; 09.11.2017
comment
Я делал это раньше, но для этого требуется много шагов, которые мне всегда нужно возвращать к документам и проверять. Эти две статьи не совсем ваша проблема, но они говорят о делегировании и множестве переходов: blogs.msdn.microsoft.com/sqlupdates/2014/12/05/, itprotoday.com/microsoft-sql-server/. Кроме того, веб-поиск по устранению неполадок с делегированием kerberos на сервере sql приводит к появлению множества полезных блогов/документов/статей. Надеюсь, поможет. - person kirchner; 09.11.2017
comment
Когда я добавляю идентификатор пользователя и pwd в запрос opendatasource, он дает мне сообщение о том, что не удалось найти устанавливаемое сообщение isam. Любые идеи? - person anonymous; 09.11.2017