Строки соединения go-mssqldb

go-mssqldb Драйвер поддерживает три формата строка подключения: URL, ADO и ODBC. Все три формата поддерживают один и тот же набор параметров соединения. Выбирайте формат, который лучше всего подходит вашему приложению или модели развертывания.

Tip

Используйте формат URL для новых приложений Go. Он интегрируется с пакетом net/url Go для безопасного кодирования и программного построения. Используйте формат ADO при переносе строк соединения из .NET-приложений, а также используйте формат ODBC, когда уход из распорки удобнее для значений с точкой с запятой или другими специальными символами.

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

Формат URL соответствует этой sqlserver:// схеме и является самым распространённым форматом для Go-приложений:

sqlserver://username:password@host:port?database=AdventureWorks2025&param=value

Примеры

Подключитесь к локальному экземпляру по умолчанию с помощью SQL-аутентификации:

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

Подключение к именованному экземпляру:

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

Подключитесь к База данных SQL Azure:

sqlserver://<user>:<password>@<server>.database.windows.net?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=false

Используйте проверка подлинности Windows (только для Windows):

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

Замечание

В формате URL порт по умолчанию установлен на 1433. Чтобы указать другой порт, включите его после хоста: sqlserver://<server>:1434?database=AdventureWorks2025.

Специальные символы в паролях

В формате URL пароли со специальными символами должны быть закодированы по процентам. Распространённые символы, требующие кодирования:

Character Encoded Пример пароля Кодированная форма
@ %40 p@ssword p%40ssword
: %3A p:ssword p%3Assword
/ %2F p/ssword p%2Fssword
# %23 p#ssword p%23ssword
% %25 p%ssword p%25ssword

Используйте url.UserPassword() автоматическую обработку кодирования:

u := &url.URL{
    Scheme: "sqlserver",
    User:   url.UserPassword("<user>", "p@ss:word#1"),
    Host:   "<server>:1433",
}
u.RawQuery = url.Values{"database": {"AdventureWorks2025"}}.Encode()
// Result: sqlserver://<user>:p%40ss%3Aword%231@<server>:1433?database=AdventureWorks2025

В формате ADO процентное кодирование не требуется. Если значение содержит точку с запятой, оберните его в двойные кавычки: password="<password>". В формате ODBC оборачивайте значение в скобки: password={<password>}.

Формат ADO

Формат ADO использует пары, разделённые key=value точками с запятой:

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

Примеры ADO

Подключитесь по номеру порта:

server=<server>;port=1434;user id=<user>;password=<password>;database=AdventureWorks2025

Подключение к именованному экземпляру:

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

Замечание

В формате server ADO поля и port являются отдельными параметрами. Не включайте в стоимость порт, разделённый server с двоеточием.

Синонимы ключевых слов ADO.NET

В версиях 1.11.0 и более поздних версий формат ADO также принимает альтернативные написания ключевых слов, которые использует Microsoft. Data.SqlClient, который позволяет повторно использовать строка подключения, написанную для .NET-приложения. Ключевые слова не учитывают регистр.

Ключевое слово ADO.NET Параметр go-mssqldb
Addr, Address, Network Address, Data Source server
User, UID user id
PWD password
Initial Catalog database
App, Application Name app name
Connect Timeout, Timeout connection timeout
Application Intent applicationintent
Failover Partner failoverpartner
Failover Partner SPN failoverpartnerspn
Trust Server Certificate trustservercertificate
Multi Subnet Failover multisubnetfailover
Host Name In Certificate hostnameincertificate
Server SPN serverspn
Server Certificate servercertificate
WSID workstation id
Column Encryption Setting columnencryption

Следующая строка подключения использует только синонимы:

Data Source=<server>;Initial Catalog=AdventureWorks2025;UID=<user>;PWD=<password>;Connect Timeout=30

Эти синонимы применимы только к формату ADO. Форматы URL и ODBC принимают имена параметров драйверов в правом столбце.

Формат ODBC

Формат ODBC использует odbc: префикс с парами, разделёнными key=value точками с запятой. Значения, содержащие специальные символы, могут быть заключены в скобки:

odbc:server=<server>;user id=<user>;password={<password>};database=AdventureWorks2025

Уходящие корсеты

В формате ODBC вводите значение {} , чтобы избежать точок с запятой, знаков равенства и других специальных символов. Чтобы включить буквальный } внутренний брекет, удвойте его:

odbc:password={my}}password}

Общие параметры

Следующие параметры объединены для всех трёх форматов. Драйвер разрешает псевдонимы только в строках соединения в формате ADO . Строки соединения в форматах URL и ODBC точно совпадают с именами параметров, за исключением корпуса.

Parameter Aliases Description
user id user Имя входа SQL Server.
password - Пароль для входа в SQL Server.
database - Имя целевой базы данных.
connection timeout - Тайм-аут для обмена логином через секунды. Драйвер по умолчанию — 0, что не применяет тайм-аута к обмену входом. Начальное сетевое соединение ограничено отдельно dial timeout. Предпочитаю использовать контексты Go для управления тайм-аутом соединений и запросов. Для База данных SQL Azure serverless с включенной автопаузой первое подключение к приостановленной базе данных не происходит из-за ошибки 40613, пока база данных возобновляется. Добавьте логику повторных попыток вместо более длительного тайм-аута. Базы данных обычно возобновляются менее чем за одну минуту. Для получения дополнительной информации смотрите разделы «Автопауза и автовозобновление».
dial timeout - Тайм-аут сетевого набора за секунды. Драйвер по умолчанию — 15 секунд на зарегистрированный протокол. Настройка 0 применяет то же самое по умолчанию, вместо бесконечного ожидания.
encrypt - Режим шифрования: strict,true/mandatory , , . false/optionaldisable При исключении по умолчанию .false/optional Для Azure SQL и производственных соединений, установите encrypt=true явно.
TrustServerCertificate - Пропустить проверку сертификата. Когда encrypt указано, по умолчанию .false Когда encrypt опущено, по умолчанию .true Используйте false для продакшн и Azure SQL-соединений.
app name - Имя приложения передавалось серверу.
authenticator - Индивидуальный аутентификатор. Используется внутри пакета azuread .

Полный список вариантов подключения смотрите в разделе «Подключение».

Постройте строки соединения в коде

Используйте url.URL тип или msdsn.Config структуру для программного построения строк соединения вместо конкатенации необработанных строк. Этот подход избегает проблем с инъекцией и кодированием.

Конструктор URL

Используйте url.URL стандартную библиотеку для безопасной структуры строка подключения:

import "net/url"

query := url.Values{}
query.Add("database", "AdventureWorks2025")
query.Add("encrypt", "true")
query.Add("TrustServerCertificate", "false")

u := &url.URL{
    Scheme:   "sqlserver",
    User:     url.UserPassword("<user>", "<password>"),
    Host:     "<server>.database.windows.net:1433",
    RawQuery: query.Encode(),
}
connString := u.String()

NewConnectorConfig

Используйте NewConnectorConfig с msdsn.Config для структурной настройки, особенно когда нужно настроить кастомный набор SessionInitSQLномера или явные настройки TLS, например TrustServerCertificate:

import (
    "database/sql"
    "github.com/microsoft/go-mssqldb"
    "github.com/microsoft/go-mssqldb/msdsn"
)

config := msdsn.Config{
    Host:                   "<server>",
    Port:                   1433,
    Database:               "AdventureWorks2025",
    TrustServerCertificate: false,
}

connector := mssql.NewConnectorConfig(config)
db := sql.OpenDB(connector)

Если вы всё ещё зависите от поведения mssql устаревшего имени драйвера, которое переписывает ? заглушки, используйте NewConnectorWithProcessQueryText вместо этого NewConnectorConfig при сборке коннектора.