Налаштуйте необмежену делегацію для BULK INSERT


12

У мене є пара вузлів 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, щоб зробити ці посібники застарілими?

Я можу підтвердити, що цей GPO було застосовано до MSSQL1 через gpresult.exe /R, і обидва вузли SQL та File Server були перезавантажені після цього, щоб забезпечити промивання будь-яких кеш-файлів.


1
Два питання: 1) Чи намагалися ви ввімкнути особистий обліковий запис домену Windows для делегування ?, 2) Коли ви підключаєтесь до SQL Server через SSMS, чи входите ви на сервер (тобто віддалений робочий стіл), на якому працює SQL Server та підключаєтесь локально, або увійшли на робочу станцію та віддалено підключились до SQL Server? Якщо ви ще не намагалися ввійти на сервер безпосередньо та локально підключитися через SSMS, спробуйте це. Якщо ви не намагалися ввімкнути свій доменний обліковий запис для делегування, спробуйте це.
Соломон Руцький

Відповіді:


1

Ваша конфігурація виглядає надійною. SPN та Delegation налаштовані так, як я це зробив би сам.

Єдине, що ви не пояснили - це дозволи на отримання файлів / спільного доступу. Ось де вступає моє рішення.

Рішення 1 (Особистий рахунок)

  1. Переконайтеся, що ваш особистий обліковий запис дозволений для доступу до файлу на спільній доступності файлового сервера
    • ваш особистий обліковий запис потребує принаймні дозволу НАЧАКУВАННЯ на рівні дозволу на спільний доступ, або в більшості випадків ви можете побачити, що КОЖНИЙ має дозвіл ПРОЧИТАТИ.
    • ваш особистий обліковий запис потребує принаймні дозволу READ на рівні дозволу файлу
    • Перевірте спадкування дозволів на рівні файлу для цього файлу
      • Перезавантажте SQL-сервер після зміни дозволу на файл або циклу служби SQL Server.
    • Як варіант: Увійдіть до SQL Server за допомогою особистого облікового запису та підключіться до спільного доступу та відкрийте файл.
  2. Відкрийте SSMS за допомогою особистого рахунку.
  3. Відкрийте підключення до свого екземпляра SQL Server за допомогою аутентифікації Windows.
    • Переконайтесь, що ви підключені до свого примірника з обліковим записом служби SQL Server за допомогою сценарію, який ви використовували раніше.
  4. Виконайте імпорт із BULK INSERT

Рішення 2 (обліковий запис служби SQL Server)

  1. Переконайтеся, що в обліковому записі служби SQL Server доступ до файлу на спільній доступності файлового сервера
    • то служба SQL Server потреба облікового запису в дозволах найменш READ на рівні дозволу акцій або в більшості випадків ви можете побачити , що кожен має дозвіл на читання.
    • то служба SQL Server потреба облікового запису в дозволах найменш READ на рівні дозволу файлу
    • Перевірте спадкування дозволів на рівні файлу для цього файлу
      • Перезавантажте SQL-сервер після зміни дозволу на файл або циклу служби SQL Server.
    • Як варіант: Увійдіть до SQL Server за допомогою облікового запису служби SQL Server та підключіться до спільного доступу та відкрийте файл.
  2. Відкрийте SSMS за допомогою облікового запису служби SQL Server .
    • Runas: your_domain \ SQL_Server_service_account
    • Введіть пароль
  3. Відкрийте підключення до свого SQL-сервера за допомогою автентифікації Windows.
    • Переконайтесь, що ви підключені до свого примірника з обліковим записом служби SQL Server за допомогою сценарію, який ви використовували раніше.
  4. Виконайте імпорт із BULK INSERT

BULK INSERT дозволи

Делегування облікового запису безпеки (видавання себе за особу)

Якщо користувач використовує вхід у систему SQL Server, використовується профіль захисту облікового запису процесу SQL Server. Логін, що використовує аутентифікацію SQL Server, не може бути автентифікований за межами бази даних Engine. Тому, коли команда BULK INSERT ініціюється входом із використанням автентифікації SQL Server, з'єднання з даними здійснюється за допомогою контексту безпеки облікового запису процесу SQL Server ( обліковий запис, який використовується сервісом бази даних SQL Server ). Щоб успішно прочитати вихідні дані, ви повинні надати обліковому запису, використовуваному двигуном бази даних SQL Server, доступ до вихідних даних. На противагу цьому, якщо користувач SQL Server входить у систему за допомогою автентифікації Windows, користувач може читати лише ті файли, до яких може отримати доступ обліковий запис користувача, незалежно від профілю безпеки процесу SQL Server.

Довідка: BULK INSERT (Transact-SQL)


0

З мого досвіду з делегуванням, обліковий запис служби SQL Server потребує відповідних дозволів на доступ до спільної частини, до якої намагається отримати доступ від вашого імені. Ви коригували ці дозволи? Я думаю, що лише для читання вистачить наперед.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.