Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
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}
Общие параметры
Следующие параметры объединены для всех трёх форматов. Драйвер разрешает псевдонимы только в строках соединения в формате 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 при сборке коннектора.