У мене є пара вузлів Microsoft SQL Server 2016 у групі Always On Availability. Я намагаюся виконати BULK INSERT
(за допомогою запиту SQL Server 2016 Management Studio) у файлі, розташованому на кластері файлів з відмовою від файлових серверів Windows Server 2016, але я отримую таку помилку:
Msg 4861, рівень 16, стан 1
Неможливо навантажити групу, оскільки файл "\ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt" не вдалося відкрити. Код помилки операційної системи 5 (доступ заборонено.)
Це відбудеться незалежно, якщо я буду використовувати активне ім'я вузла ( nas2.my.domain
) або слухач відказового кластера ( nas.my.domain
).
Оглянувшись, я з'ясував, що це було через те, що SQL Server не зміг себе представити обліковому запису користувача, з яким я пов’язаний через нюанси BULK INSERT
.
Якщо ви підключитесь до SQL Server за допомогою системи автентифікації Windows, обліковий запис служби SQL Server намагається представити ваш обліковий запис користувача під час підключення до файлового сервера. Якщо ви підключитесь за допомогою аутентифікації SQL Server, він підключиться до файлового сервера як обліковий запис служби SQL Server.
Якщо делегування та представлення себе не буде налаштовано належним чином (стан за замовчуванням), служба SQL Server не зможе представити ваш обліковий запис користувача і перестане намагатися підключитися до файлового сервера як анонімного користувача.
Це можна підтвердити, переглянувши журнал подій безпеки на файловому сервері. Ці факти разом із посібником із налаштування необмеженої та обмеженої делегації задокументовані у таких посиланнях:
Я намагався виконувати вказівки в посібнику thesqldude , але він все ще не працює.
База даних, до якої я намагаюся BULK INSERT
, не входить у групу доступності, тому має бути актуальним лише вузол MSSQL1. Файл-сервер був активним у вузлі NAS2. Перевірка журналу подій на файловому сервері показує, що він все ще страждає від цієї проблеми, і SQL Server намагається пройти автентифікацію на файловому сервері як анонімного користувача, а не видавати себе за обліковий запис користувача.
Хтось знає, що йде не так? Або якщо щось змінилося в SQL Server 2016, щоб зробити ці посібники застарілими?
- Запис журналу подій безпеки файлового сервера
- Делегування облікового запису служби
- SPN-адреси облікового запису служби
- Делегування облікових записів на комп'ютері SQL Server №1
- Файловий сервер файлів №2 SPN
- Об'єкти групової політики
sys.dm_exec_connections
- Керберос
Я можу підтвердити, що цей GPO було застосовано до MSSQL1 через gpresult.exe /R
, і обидва вузли SQL та File Server були перезавантажені після цього, щоб забезпечити промивання будь-яких кеш-файлів.