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


Руководство. Настройка проверки подлинности 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. Убедитесь, что mssql пользователь владеет файлом /var/opt/mssql/mssql.conf , а не 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. Убедитесь, что mssql пользователь владеет созданным keytab, и что только 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

Используйте учетные данные Windows для подключения к экземпляру SQL Server с помощью SQL Server Management Studio (SSMS).

Вы также можете использовать средство, например служебную программу sqlcmd , для подключения к экземпляру SQL Server с помощью проверки подлинности Windows.

sqlcmd -E -S 'sql1.contoso.com'