Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Драйвер 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. |