go-mssqldb на Linux и macOS

Драйвер go-mssqldb — чистая библиотека Go, которая компилируется нативно на Linux и macOS без внешних зависимостей от C. В этой статье рассматриваются специфические для платформы конфигурации аутентификации и сертификатов.

Installation

Установка одинакова на всех платформах:

go get github.com/microsoft/go-mssqldb

Драйвер ODBC, FreeTDS или другие библиотеки C не требуются.

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

Аутентификация SQL работает одинаково на Linux, macOS и Windows:

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

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

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

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

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

sqlserver://CONTOSO%5C<user>:<password>@<server>:1433?database=mydb

Формат ADO

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

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

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

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

Аутентификация Kerberos в Linux и macOS использует пакет krb5, встроенный в драйвер. Нет зависимостей от внешних библиотек.

Предпосылки

  1. Действительный конфигурационный файл Kerberos. Путь по умолчанию выглядит /etc/krb5.confследующим образом:

    [libdefaults]
        default_realm = MYDOMAIN.COM
        dns_lookup_kdc = true
    
    [realms]
        MYDOMAIN.COM = {
            kdc = dc1.mydomain.com
        }
    
  2. Экземпляр SQL Server должен иметь зарегистрированное основное имя сервиса (SPN) (например, MSSQLSvc/<server>.mydomain.com:1433).

Подключитесь с помощью клавиатуры

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

sqlserver://<user>@MYDOMAIN.COM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYDOMAIN.COM&krb5-keytabfile=/etc/<user>.keytab

Подключитесь к кэшу учетных данных

Сначала получите билет:

kinit <user>@MYDOMAIN.COM

Затем подключитесь, используя кэшированный учетный код:

sqlserver://<user>@MYDOMAIN.COM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYDOMAIN.COM&krb5-credcachefile=/tmp/krb5cc_1000

Параметры Kerberos

Parameter По умолчанию 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.

Для получения дополнительной информации см. разделы SQL Server и проверка подлинности Windows.

Проверка подлинности Windows (SSPI) недоступна

На Linux и macOS интегрированная аутентификация Windows (SSPI / trusted_connection=yes) недоступна. Используйте один из следующих вариантов:

Метод Строка соединения
NTLM sqlserver://DOMAIN%5Cuser:password@host?database=db
Kerberos (keytab) sqlserver://user@REALM@host?database=db&krb5-realm=REALM&krb5-keytabfile=/path
Kerberos (кэш) sqlserver://user@REALM@host?database=db&krb5-realm=REALM&krb5-credcachefile=/path
Проверка подлинности SQL sqlserver://user:password@host?database=db
Майкрософт Ентра айди sqlserver://host?database=db&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false (используйте azuresql драйвер)

Конфигурация сертификата

В Linux и macOS TLS-сертификаты, используемые с certificate параметрами OR serverCertificate , должны быть закодированы PEM-файлами. Драйвер читает их, используя напрямую пакет crypto/tls Go.

Хранилище системного доверия

Драйвер использует стандартное хранилище доверия сертификатов операционной системы. В Linux это хранилище доверия обычно расположено по /etc/ssl/certs/ адресу или /etc/pki/tls/certs/. На macOS используется системный ключ.

Чтобы добавить пользовательский сертификат CA в системное хранилище:

Ubuntu/Debian:

sudo cp myca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

RHEL/Fedora:

sudo cp myca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

macOS:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain myca.crt

Альтернативно, используйте certificate параметр соединения, чтобы напрямую указать сертификат CA без изменения системного хранилища:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&certificate=/path/to/ca-cert.pem