Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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¶m=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 с двоеточием.
Формат ODBC
Формат ODBC использует odbc: префикс с парами, разделёнными key=value точками с запятой. Значения, содержащие специальные символы, могут быть заключены в скобки:
odbc:server=<server>;user id=<user>;password={<password>};database=AdventureWorks2025
Уходящие корсеты
В формате ODBC вводите значение {} , чтобы избежать точок с запятой, знаков равенства и других специальных символов. Чтобы включить буквальный } внутренний брекет, удвойте его:
odbc:password={my}}password}
Общие параметры
Следующие параметры используются для всех трёх форматов:
| Parameter | Aliases | Description |
|---|---|---|
user id |
user |
Имя входа SQL Server. |
password |
- | Пароль для входа в SQL Server. |
database |
- | Имя целевой базы данных. |
connection timeout |
- | Тайм-аут входа — через секунды. Драйвер по умолчанию — 0, который ждёт бесконечно. Предпочитаю использовать контексты Go для управления тайм-аутом соединений и запросов. |
dial timeout |
- | Тайм-аут сетевого набора за секунды. Драйвер по умолчанию основан на зарегистрированных протоколах. Готов 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 при сборке коннектора.