Проверка подлинности SQL Server и Windows в go-mssqldb

Драйвер go-mssqldb поддерживает аутентификацию SQL Server, интегрированную аутентификацию Windows (SSPI), NTLM и Kerberos. В этой статье рассматривается каждый метод с примерами строка подключения и примерами кода.

Для аутентификации Microsoft Entra ID см. аутентификация Microsoft Entra ID.

Выбор метода проверки подлинности

Используйте самый сильный метод, который подходит вашей окружающей среде и платформе идентичности:

Предпочитаю такой порядок Метод Используйте его, когда
1 Майкрософт Ентра айди Вы подключаетесь к Azure SQL и можете использовать управляемую идентичность, идентификацию рабочей нагрузки или другой поток Entra без хранения паролей.
2 Интегрированная аутентификация Windows (SSPI) Ваше приложение работает на Windows и может использовать текущий идентификатор Windows напрямую.
3 Kerberos Вы используете Linux или macOS и у вас уже есть билеты Kerberos, файлы keytab или управляемая доменная инфраструктура.
4 NTLM Нужна аутентификация домена, но Kerberos недоступен и непрактичен.
5 Проверка подлинности SQL Server У вас нет встроенной опции идентификации, и вам нужно использовать SQL-логин и пароль.

Если работает несколько методов, предпочитайте тот, который избегает долгоживущих секретов и соответствует системе идентичности хост-платформы.

Проверка подлинности SQL Server

Аутентификация SQL Server использует имя входа и пароль, хранящиеся в SQL Server. Укажите параметры user id и password:

Формат URL-адреса

Замечание

Для строк URL-подключения закодируйте специальные символы в имени пользователя или пароле с помощью процентного кодирования. В именах пользователей для проверки подлинности Windows в качестве разделителя домена используется %5C, например sqlserver://DOMAIN%5Cusername:password@host. В строках соединения ADO и ODBC используйте буквальную DOMAIN\username форму.

Укажите имя пользователя и пароль в URL:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true

Формат ADO

Используйте ключи user id и password в строке подключения в стиле ADO:

server=<server>;user id=<user>;password=<password>;database=AdventureWorks2025;Encrypt=true

Пример кода

Подключитесь к аутентификации SQL Server и проверьте соединение:

package main

import (
    "database/sql"
    "log"

    _ "github.com/microsoft/go-mssqldb"
)

func main() {
    db, err := sql.Open("sqlserver",
        "sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    if err = db.Ping(); err != nil {
        log.Fatal(err)
    }
}

Интегрированная аутентификация Windows (SSPI)

В Windows драйвер использует SSPI (Security Support Provider Interface) для аутентификации с использованием учетных данных текущего пользователя Windows. Для строка подключения не требуется имя пользователя или пароль.

sqlserver://<server>?database=AdventureWorks2025&trusted_connection=yes&encrypt=true

Замечание

Интегрированная аутентификация Windows через SSPI работает только тогда, когда приложение Go работает на Windows и текущий пользователь имеет доступ к экземпляру SQL Server.

Проверка подлинности NTLM

Аутентификация NTLM работает на всех платформах (Windows, Linux и macOS). Укажите имя пользователя и пароль, соответствующее домену:

Формат URL NTLM

Закодируйте обратный слеш в DOMAIN\<user> с помощью URL-кодирования как %5C:

sqlserver://DOMAIN%5C<user>:<password>@<server>?database=AdventureWorks2025&encrypt=true

Замечание

В формате URL необходимо выполнить URL-кодирование символа обратной косой черты в DOMAIN\<user> как %5C.

Формат NTLM ADO

Обратная косая черта в имени пользователя указывает драйверу на NTLM-аутентификацию:

server=<server>;user id=DOMAIN\<user>;password=<password>;database=AdventureWorks2025;Encrypt=true

Драйвер обнаруживает символ обратной косой черты в имени пользователя и автоматически применяет NTLM.

Аутентификация Kerberos

Аутентификация Kerberos работает на Linux и macOS, когда система имеет корректную конфигурацию Kerberos. Драйвер использует пакет krb5 для аутентификации Kerberos. Существует три способа предоставления удостоверений квалификации.

Необходимые условия

  • Допустимый krb5.conf файл (по умолчанию путь: /etc/krb5.conf).
  • SQL Server должен иметь зарегистрированное основное имя сервиса (SPN).

Метод 1: Файл Keytab

Файл keytab содержит зашифрованные главные ключи Kerberos. Укажите путь к файлу через keytab и область пользователя:

sqlserver://<user>@MYREALM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYREALM&krb5-keytabfile=/path/to/user.keytab&encrypt=true

Метод 2: Кэш учетных данных

Используйте существующий кэш учетных данных Kerberos, созданный kinit.

sqlserver://<user>@MYREALM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYREALM&krb5-credcachefile=/tmp/krb5cc_1000&encrypt=true

Метод 3: Необработанные учетные данные

Укажите пароль непосредственно в строке подключения. Драйвер использует предоставленные учетные данные для выполнения аутентификационного обмена Kerberos.

sqlserver://<user>@MYREALM:<password>@<server>:1433?database=AdventureWorks2025&krb5-realm=MYREALM&encrypt=true

Параметры Kerberos

Parameter Default Description
krb5-configfile /etc/krb5.conf Путь к конфигурационному файлу Kerberos.
krb5-realm - Имя царства Кербероса, например MYDOMAIN.COM.
krb5-keytabfile - Путь к файлу keytab.
krb5-credcachefile - Путь к файлу кэша учетных данных.
krb5-dnslookupkdc true Используйте записи DNS SRV для обнаружения KDC.
krb5-udppreferencelimit 1 Максимальный размер сообщения до перехода с UDP на TCP.
ServerSPN - Переопределите автоматически сгенерированный SPN.