Руководство. Настройка проверки подлинности Active Directory в SQL Server на Linux с помощью adutil
Область применения: SQL Server — Linux
В этом руководстве объясняется, как настроить проверку подлинности Windows Active Directory для SQL Server на Linux с помощью adutil. Другой метод настройки проверки подлинности Active Directory с помощью ktpass см. в руководстве по использованию проверки подлинности Active Directory с SQL Server на Linux.
В этом руководстве рассматриваются следующие задачи:
- Установка adutil
- Присоединение компьютера Linux к домену Active Directory
- Создайте пользователя Active Directory для SQL Server и задайте имя субъекта-службы (SPN) с помощью adutil
- Создание файла keytab (таблица ключей) службы SQL Server
- Настройка SQL Server для использования файла keytab
- Создание имен входа SQL Server на основе Active Directory с помощью Transact-SQL
- Подключение к SQL Server с помощью проверки подлинности Active Directory
Необходимые компоненты
Прежде чем настроить проверку подлинности Active Directory, вам потребуется:
- Контроллер домена Windows, на котором запущены доменные службы Active Directory в вашей сети.
- Средство adutil, установленное на хост-компьютере, присоединенном к домену.
Подготовка компьютера домена
В Active Directory должна быть добавлена запись узла переадресации (A) для IP-адреса узла Linux. В этом учебнике IP-адрес хост-компьютера sql1
— 10.0.0.10
. Мы добавим запись узла пересылки в Active Directory в следующем примере. Эта запись гарантирует, что при подключении пользователей к sql1.contoso.com
они будут обращаться к нужному узлу.
В этом руководстве используется среда Azure с тремя виртуальными машинами (ВМ). Одна виртуальная машина — это компьютер под управлением Windows Server с именем adVM.contoso.com
, который работает как контроллер домена (DC) с доменным именем contoso.com
. Вторая ВМ — это клиентская виртуальная машина под управлением Windows 10 с именем winbox
, на которой установлен SQL Server Management Studio (SSMS). Третья машина — это компьютер с Ubuntu 18.04 LTS. Он имеет имя sql1
, и в нем размещается SQL Server.
Присоединение хост-компьютера Linux к домену Active Directory
Сведения о присоединении sql1
к домену Active Directory см. в разделе "Присоединение к SQL Server" на узле Linux к домену Active Directory.
Установка adutil
Чтобы установить adutil на хост-компьютере, присоединенном к домену, как описано выше, выполните действия, описанные в статье Общие сведения о служебной программе adutil в Active Directory.
Используйте adutil для создания пользователя Active Directory для SQL Server и задания имени субъекта-службы (SPN)
Получите или продлите билет предоставления билета (TGT) Kerberos с помощью команды
kinit
. Для командыkinit
необходимо использовать привилегированную учетную запись, а хост-компьютер уже должен входить в домен. Для учетной записи требуется разрешение на подключение к домену и создание учетных записей и имен субъектов-служб в домене.В этом примере скрипта на контроллере домена уже создается привилегированный
privilegeduser@CONTOSO.COM
пользователь.kinit privilegeduser@CONTOSO.COM
С помощью adutil создайте нового пользователя, который будет привилегированной учетной записью Active Directory sql Server.
Пароли можно указать тремя различными способами. Если вы используете более одного из этих методов, они имеют приоритет в следующем порядке:
- Использование флага пароля:
--password <password>
- В переменной среды:
ADUTIL_ACCOUNT_PWD
- Интерактивный ввод в командной строке
Переменная среды или интерактивные методы ввода более безопасны, чем флаг пароля.
adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password '<password>'
Вы можете указать имя учетной записи с помощью различающегося имени (
--distname
), как показано ранее, или использовать имя подразделения. Если указаны оба имени, имя подразделения (--ou
) имеет приоритет над различающимся именем. Для получения дополнительных сведений можно выполнить следующую команду:adutil user create --help
Внимание
Пароль должен соответствовать политике паролей по умолчанию SQL Server. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Пароли могут иметь длину до 128 символов. Рекомендуется использовать максимально длинные и сложные пароли.
- Использование флага пароля:
Зарегистрируйте имена субъектов-служб в созданном ранее субъекте. Необходимо использовать полное доменное имя (FQDN) компьютера. В этом учебнике используется порт SQL Server по умолчанию 1433. В вашем случае номер порта может быть другим.
adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 1433
addauto
автоматически создает имена субъектов-служб, если для учетной записи достаточно привилегийkinit
.-n
: имя учетной записи, назначаемой именам субъектов-служб.-s
: имя службы, используемое для создания имен субъектов-служб. В этом случае это для службы SQL Server, поэтому это имяMSSQLSvc
службы.-H
: имя узла, используемое для создания имен субъектов-служб. Если это не указано, используется полное доменное имя локального узла. В этом случае имя узла —sql1
, а полное доменное имя —sql1.contoso.com
.-p
: порт, используемый для создания имен субъектов-служб. Если это не указано, имена субъектов-служб создаются без порта. Подключения SQL работают только в этом случае, если SQL Server прослушивает порт по умолчанию 1433.
Создание файла ключа службы SQL Server с помощью mssql-conf
Вы можете установить adutil и интегрировать его с mssql-conf, чтобы создать и настроить keytab с помощью mssql-conf напрямую. Этот метод предпочтителен для создания файла ключей службы SQL Server. В противном случае можно создать файл ключа службы SQL Server вручную.
Необходимые компоненты
Убедитесь, что
/var/opt/mssql/mssql.conf
файл принадлежитmssql
и неroot
принадлежит. Если это не так, необходимо выполнить команды mssql-conf с помощьюsudo
.На контроллере домена в параметрах Active Directory для
network.privilegedadaccount
учетной записи (в этих примерахsqluser@CONTOSO.COM
) включите следующие параметры на вкладке "Учетная запись " в разделе параметров учетной записи:- Эта учетная запись поддерживает 128-разрядное шифрование Kerberos AES
- Данная учетная запись поддерживает 256-битовое шифрование Kerberos AES
Создание файла keytab
После создания пользователя и имени участника-службы можно создать keytab, выполнив следующие действия.
Переключитесь на пользователя
mssql
.su mssql
Войдите как пользователь Active Directory с помощью
kinit
команды:kinit privilegeduser@CONTOSO.COM
Создайте файл keytab:
/opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
При появлении запроса на перезапуск службы SQL Server для внедрения новой конфигурации Active Directory можно выполнить в следующем разделе.
Убедитесь, что ключ создается с правильными записями:
klist -kte /var/opt/mssql/secrets/mssql.keytab
Должен отобразиться результат, как в примере ниже:
keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ 4 12/30/2021 14:02:08 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
/var/opt/mssql/mssql.conf
Если файл не принадлежитmssql
, необходимо настроить mssql-conf для заданияnetwork.kerberoskeytabfile
иnetwork.privilegedadaccount
значений в соответствии с предыдущими шагами. Введите пароль при появлении запроса./opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab /opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser
Проверьте конфигурацию, чтобы убедиться, что проверка подлинности Active Directory работает без каких-либо проблем.
/opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytab
Выходные данные должны соответствовать следующему примеру.
Detected Configuration: Default Realm: CONTOSO.COM Keytab: /var/opt/mssql/secrets/mssql.keytab Reverse DNS Result: sql1.contoso.com SQL Server Port: 1433 Detected SPNs (SPN, KVNO): (MSSQLSvc/sql1.CONTOSO.COM:1433, 4) (MSSQLSvc/sql1.CONTOSO.COM, 4) (MSSQLSvc/sql1:1433, 4) (MSSQLSvc/sql1, 4) Privileged Account (Name, KVNO): (sqluser, 4)
Создание файла keytab службы SQL Server вручную
Если вы установили adutil и интегрированы с mssql-conf, вы можете перейти к созданию файла ключей службы SQL Server с помощью mssql-conf.
Создайте файл keytab, содержащий записи для каждого из четырех созданных ранее имен субъектов-служб и одну запись для пользователя.
adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H sql1.contoso.com --password '<password>' -s MSSQLSvc
Внимание
Пароль должен соответствовать политике паролей по умолчанию SQL Server. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Пароли могут иметь длину до 128 символов. Рекомендуется использовать максимально длинные и сложные пароли.
Возможны следующие варианты командной строки:
-k
: путь, по которомуmssql.keytab
создается файл. В предыдущем примере каталог/var/opt/mssql/secrets/
уже должен существовать на узле.-p
: порт, используемый для создания имен субъектов-служб. Если это не указано, имена субъектов-служб создаются без порта.-H
: имя узла, используемое для создания имен субъектов-служб. Если это не указано, используется полное доменное имя локального узла. В этом случае имя узла —sql1
, а полное доменное имя —sql1.contoso.com
.-s
: имя службы, используемое для создания имен субъектов-служб. В этом примере имя службы SQL Server —MSSQLSvc
.--password
: пароль привилегированной учетной записи пользователя Active Directory, созданной ранее.-e
или--enctype
: типы шифрования для записи keytab. Используйте разделенный запятыми список значений. Если это не указано, будет представлен интерактивный запрос.
Можно выбрать более одного типа шифрования, если узел и домен поддерживают тип шифрования. В этом примере вы можете выбрать
aes256-cts-hmac-sha1-96
иaes128-cts-hmac-sha1-96
. Тем не менее следует избегатьarcfour-hmac
в рабочей среде, так как она имеет слабое шифрование.Если вы хотите выбрать тип шифрования без запроса, можно указать выбранный тип шифрования с помощью
-e
аргумента в предыдущей команде. Для получения дополнительных сведений о параметрахadutil keytab
выполните следующую команду:adutil keytab createauto --help
Добавьте запись в keytab для имени субъекта и пароля, который SQL Server использует для подключения к Active Directory:
adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password '<password>'
Внимание
Пароль должен соответствовать политике паролей по умолчанию SQL Server. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Пароли могут иметь длину до 128 символов. Рекомендуется использовать максимально длинные и сложные пароли.
-k
: Путь к созданиюmssql.keytab
файла.-p
: субъект, добавляемый в keytab.
Файл не перезаписывает предыдущие файлы. Он
adutil keytab [ create | autocreate ]
просто добавляется в файл, если он уже присутствует.Убедитесь, что создаваемый файл keytab принадлежит пользователю
mssql
, и только у пользователяmssql
есть доступ к нему для чтения и записи. Вы можете выполнитьchown
следующие команды иchmod
команды:chown mssql /var/opt/mssql/secrets/mssql.keytab chmod 440 /var/opt/mssql/secrets/mssql.keytab
Настройка SQL Server для использования файла keytab
Выполните приведенные ниже команды, чтобы настроить SQL Server для использования ключа, созданного на предыдущем шаге, и задайте привилегированную учетную запись Active Directory, созданную ранее. В нашем примере имя пользователя — sqluser
.
/opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
/opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser
Перезапуск SQL Server
Выполните следующую команду, чтобы перезапустить службу SQL Server:
sudo systemctl restart mssql-server
Создание имен входа SQL Server на основе Active Directory в Transact-SQL
Подключитесь к SQL Server и выполните следующие команды, чтобы создать имя входа и подтвердить его наличие.
CREATE LOGIN [contoso\privilegeduser]
FROM WINDOWS;
SELECT name
FROM sys.server_principals;
Подключение к SQL Server с помощью проверки подлинности Active Directory
Чтобы подключиться с помощью SSMS или Azure Data Studio, войдите в SQL Server с учетными данными Windows.
Для подключения к SQL Server с использованием проверки подлинности Windows можно также использовать такое средство, как sqlcmd.
sqlcmd -E -S 'sql1.contoso.com'
Связанный контент
- Общие сведения о проверке подлинности Active Directory для SQL Server на Linux и контейнеров
- Устранение неполадок проверки подлинности Active Directory для SQL Server на Linux и контейнеров
- Проверка подлинности Active Directory для SQL Server на Linux
- Руководство по настройке проверки подлинности Active Directory с помощью контейнеров SQL Server на Linux
- Поворот ключевых элементов для SQL Server на Linux