Время прочтения: 3 мин.
«Be made using the login’s current security context»
(«устанавливать с использованием текущего контекста безопасности имени для входа»)
Как правильно организовать доступ сотрудников организации к данным в условиях использования нескольких экземпляров СУБД MS SQL с помощью технологии LinkedServer, с windows аутентификацией пользователей на СУБД MS SQL, сохранив при этом права на доступы к конкретным данным конкретных баз данных (БД) на конкретных серверах? Как избежать создания промежуточных учетных записей (УЗ) с правами на LinkedServer и правами на удаленные БД, которые потеряют свою актуальность при изменении прав пользователя к одной из БД или схеме БД, или роли в БД?
Ответ, казалось бы, на поверхности, корпорация Microsoft предусмотрела такую схему работы. Но если мы просто выберем обсуждаемую настройку — то результат окажется нулевым. Мы увидим сообщение об ошибке ниже:
Почему так происходит, на каком этапе теряются данные о пользователе и откуда появляется ANONYMOUS LOGON, поможет понять изучение материалов о DOUBLE HOP на MSDN.
Для решения же нашей задачи достаточно выполнить ряд условий и настроек, описанных ниже и этой опцией от Microsoft все-таки можно воспользоваться.
Итак, начнем:
Дано:
- домен MS Windows;
- 3 Экземпляра СУБД MS SQL;
- windows аутентификация пользователей на СУБД MS SQL.
Задача:
Обеспечить доступ пользователей к данным БД на всех экземплярах СУБД с помощью технологии LinkedServer.
Решение:
- Создадим в ActiveDirectory (AD) доменную УЗ DOMAIN\MASTER_SQL. Под этой УЗ будут стартовать все службы MS SQL всех наших экземпляров СУБД;
- Настроим старт служб MS SQL от имени этой УЗ на каждом сервере;
- Настроим ServicePrincipalName (SPN) для УЗ DOMAIN\MASTER_SQL:
Выполним в командной строке
setSPN –S MSSQLSvc/SQLServer1:1433
setSPN –S MSSQLSvc/SQLServer1 DOMAIN\MASTER_SQL
где:
- S ключ для команды setSPN на создание SPN;
- MSSQLSvc/SQLServer1 – служба MS SQL на сервере SQLServer1;
- 1433 – порт для MS SQL;
- DOMAIN\MASTER_SQL – доменная УЗ под которой стартуют службы MS SQL.
- В Active Directory — Пользователи и компьютеры, в свойствах учетной записи DOMAIN\MASTER_SQL, во вкладке «делегирование» выполнить настройку согласно рисунку ниже:
- Настроим Distributed Transaction Coordinator (DTC) на серверах Windows, на которых развернуты экземпляры СУБД MS SQL.
На сервере, на котором развернут наш MS SQL выполним следующую настройку: Control Panel > Administrative Tools > Component Services > Computers > My Computer > Distributed Transaction Coordinator.
На локальном DTC выбираем «свойства» идем на вкладку безопасность и отмечаем следующие пункты:
- включить доступ к сети DTC;
- разрешить удаленные клиенты;
- разрешить удаленное Администрирование;
- разрешить входящие;
- разрешить исходящие;
- не требуется проверка подлинности
Нажать ОК. Служба DTS будет перезапущена.
- Создаем Linked Server с настройкой безопасности — «Be made using the login’s current security context» («устанавливать с использованием текущего контекста безопасности имени для входа») на каждом экземпляре СУБД для каждого экземпляра СУБД.
Таким образом, мы обеспечили возможность для сотрудников с windows аутентификацией пользователя на СУБД MS SQL использовать Linked Server с настройкой «Be made using the login’s current security context» («устанавливать с использованием текущего контекста безопасности имени для входа»). Кто-то может возразить, что проблемы не было бы используй мы аутентификацию для входа SQL. Однако для повышения уровня безопасности доступа к данным, аудита действий пользователя Microsoft рекомендует использовать windows аутентификацию пользователя на СУБД MS SQL.