Поделиться через


Руководство. Настройка проверки подлинности 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)

  1. Получите или продлите билет предоставления билета (TGT) Kerberos с помощью команды kinit. Для команды kinit необходимо использовать привилегированную учетную запись, а хост-компьютер уже должен входить в домен. Для учетной записи требуется разрешение на подключение к домену и создание учетных записей и имен субъектов-служб в домене.

    В этом примере скрипта на контроллере домена уже создается привилегированный privilegeduser@CONTOSO.COM пользователь.

    kinit privilegeduser@CONTOSO.COM
    
  2. С помощью 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 символов. Рекомендуется использовать максимально длинные и сложные пароли.

  3. Зарегистрируйте имена субъектов-служб в созданном ранее субъекте. Необходимо использовать полное доменное имя (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 вручную.

Необходимые компоненты

  1. Убедитесь, что /var/opt/mssql/mssql.conf файл принадлежит mssql и не rootпринадлежит. Если это не так, необходимо выполнить команды mssql-conf с помощью sudo.

  2. На контроллере домена в параметрах Active Directory для network.privilegedadaccount учетной записи (в этих примерах sqluser@CONTOSO.COM) включите следующие параметры на вкладке "Учетная запись " в разделе параметров учетной записи:

    • Эта учетная запись поддерживает 128-разрядное шифрование Kerberos AES
    • Данная учетная запись поддерживает 256-битовое шифрование Kerberos AES

Создание файла keytab

После создания пользователя и имени участника-службы можно создать keytab, выполнив следующие действия.

  1. Переключитесь на пользователя mssql.

    su mssql
    
  2. Войдите как пользователь Active Directory с помощью kinit команды:

    kinit privilegeduser@CONTOSO.COM
    
  3. Создайте файл keytab:

    /opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
    

    При появлении запроса на перезапуск службы SQL Server для внедрения новой конфигурации Active Directory можно выполнить в следующем разделе.

  4. Убедитесь, что ключ создается с правильными записями:

    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
    
  5. Проверьте конфигурацию, чтобы убедиться, что проверка подлинности 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.

  1. Создайте файл 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
    
  2. Добавьте запись в 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 ] просто добавляется в файл, если он уже присутствует.

  3. Убедитесь, что создаваемый файл 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'