Подключение из Linux или macOS

Скачать драйвер ODBC

В этой статье описывается, как создать подключение к базе данных SQL Server.

Свойства соединения

Ключевые слова и атрибуты строки подключения и имени DSN, поддерживаемые в Linux и macOS, можно найти здесь.

Важно!

При подключении к базе данных, которая использует зеркальное отображение базы данных (имеет партнера по обеспечению отработки отказа), не указывайте имя базы данных в строке подключения. Вместо этого отправьте команду useимя_базы_данных, чтобы подключиться к базе данных перед выполнением запросов.

Значение, передаваемое в ключевое слово Driver, может быть одним из следующих:

  • именем, использованным при установке драйвера;

  • путем к библиотеке драйвера, которая была указана в INI-файле шаблона, используемого для установки драйвера.

Использовать имена DSN не обязательно. Вы можете использовать имя DSN для определения ключевых слов строки подключения с именем DSN с последующим созданием соответствующей ссылки в строке подключения. Чтобы создать имя DSN, создайте (при необходимости) и измените файл ~/.odbc.ini (.odbc.ini в домашнем каталоге) для имени DSN пользователя, доступного только для текущего пользователя, или /etc/odbc.ini для системного имени DSN (требуются права администратора). Следующий odbc.ini — это пример, в котором показаны минимальные требуемые записи для имени DSN:

# [DSN name]
[MSSQLTest]  
Driver = ODBC Driver 18 for SQL Server  
# Server = [protocol:]server[,port]  
Server = tcp:localhost,1433
Encrypt = yes
#
# Note:  
# Port isn't a valid keyword in the odbc.ini file  
# for the Microsoft ODBC driver on Linux or macOS
#  

Чтобы подключиться с помощью приведенного выше имени DSN в строке подключения, следует указать ключевое слово DSN следующим образом: DSN=MSSQLTest;UID=my_username;PWD=my_password.
Строка подключения выше будет эквивалентна строке подключения, определенной без ключевого слова DSN, например: Driver=ODBC Driver 18 for SQL Server;Server=tcp:localhost,1433;Encrypt=yes;UID=my_username;PWD=my_password.

При необходимости можно указать протокол и порт для подключения к серверу. Например, Server = tcp:имя_сервера,12345. Единственный протокол, который поддерживают драйверы Linux и macOS, — tcp.

Чтобы подключиться к именованному экземпляру через статический порт, используйте Server=имя_сервера,номер_порта. Версии, предшествующие 17.4., не поддерживают подключение к динамическому порту.

Кроме того, можно добавить сведения о DSN в файл шаблона и выполнить следующую команду, чтобы добавить его в ~/.odbc.ini:

odbcinst -i -s -f <template_file>

Полную документацию по INI-файлам и odbcinst см. в документации unixODBC. Сведения о записях в файле odbc.ini, характерных для ODBC Driver for SQL Server и поддерживаемых в Linux и macOS, см. в статье Ключевые слова и атрибуты строки подключения и имени DSN.

Можно проверить, что драйвер работает, используя isql для проверки подключения или следующую команду:

bcp master.INFORMATION_SCHEMA.TABLES out OutFile.dat -S <server> -U <name> -P <password>

Использование TLS/SSL

Для шифрования подключений к SQL Server можно использовать протокол TLS, ранее известный как протокол SSL. TLS защищает имена пользователей и пароли SQL Server по сети. Кроме того, TLS проверяет идентификатор сервера для защиты от атак "злоумышленник в середине".

Включение шифрования повышает безопасность за счет снижения производительности.

См. сведения о шифровании подключений в SQL Server и использовании шифрования без проверки.

Независимо от параметров для Encrypt и TrustServerCertificateучетные данные входа на сервер (имя пользователя и пароль) всегда шифруются. В следующей таблице показано действие параметров Encrypt и TrustServerCertificate.

ODBC Driver 18 и более поздних версий

Параметр шифрования Надежный сертификат сервера Принудительное шифрование на стороне сервера Результат
No Нет No Сертификат сервера не проверяется.
Данные, передаваемые между клиентом и сервером, не шифруются.
No Да No Сертификат сервера не проверяется.
Данные, передаваемые между клиентом и сервером, не шифруются.
Да Нет No Сертификат сервера проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.
Да Да No Сертификат сервера не проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.
No Нет Да Сертификат сервера проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.
No Да Да Сертификат сервера не проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.
Да Нет Да Сертификат сервера проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.
Да Да Да Сертификат сервера не проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.
Strict - - TrustServerCertificate игнорируется. Сертификат сервера проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.

Примечание.

Режим Strict доступен только для серверов, поддерживающих подключения по протоколу TDS 8.0.

ODBC Driver 17 и более ранних версий

Параметр шифрования Надежный сертификат сервера Принудительное шифрование на стороне сервера Результат
No Нет No Сертификат сервера не проверяется.
Данные, передаваемые между клиентом и сервером, не шифруются.
No Да No Сертификат сервера не проверяется.
Данные, передаваемые между клиентом и сервером, не шифруются.
Да Нет No Сертификат сервера проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.
Да Да No Сертификат сервера не проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.
No Нет Да Сертификат сервера не проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.
No Да Да Сертификат сервера не проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.
Да Нет Да Сертификат сервера проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.
Да Да Да Сертификат сервера не проверяется.
Данные, передаваемые между клиентом и сервером, шифруются.

Если используется шифрование подключения, имя (или IP-адрес) в общем имени субъекта (CN) или альтернативном имени субъекта (SAN) в TLS/SSL-сертификате SQL Server должно точно совпадать с именем (или IP-адресом) сервера, указанным в строке подключения. Ключевое слово HostnameInCertificate (версия 18.0 и выше) можно использовать для указания альтернативного имени, используемого для сопоставления с именами в TLS/SSL-сертификате. Если это ключевое слово указано, TLS/SSL-сертификат SQL Server должен совпадать с одним из имен сервера или HostnameInCertificate.

По умолчанию зашифрованные соединения всегда проверяют сертификат сервера. Но при подключении к серверу с самозаверяющим сертификатом без использования строгого режима шифрования также добавьте параметр TrustServerCertificate, чтобы обойти проверку сертификата по списку доверенных центров сертификации:

Driver={ODBC Driver 18 for SQL Server};Server=ServerNameHere;Encrypt=YES;TrustServerCertificate=YES  

В строгом режиме шифрования сертификат всегда проверяется. Вместо стандартной проверки сертификата можно использовать ключевое слово ServerCertificate (версия 18.1 и выше) для указания пути к файлу сертификата, который будет сопоставляться с сертификатом SQL Server. Этот параметр доступен только при использовании строгого шифрования. Допустимые форматы сертификатов: PEM, DER и CER. При указании этого ключевого слова проверяется полное соответствие предоставленного сертификата ServerCertificate сертификату SQL Server.

Протокол TLS в Linux и macOS использует библиотеку OpenSSL. Следующая таблица содержит минимально поддерживаемые версии OpenSSL, а также расположения хранилища доверия сертификатов по умолчанию для каждой платформы:

Платформа Минимальная версия OpenSSL Расположение хранилища доверия сертификатов по умолчанию
Debian 10, 11, 12 1.1.1 /etc/ssl/certs
Debian 9 1.1.0 /etc/ssl/certs
Debian 8.71 1.0.1 /etc/ssl/certs
OS X 10.11, macOS 1.0.2 /usr/local/etc/openssl/certs
Red Hat Enterprise Linux 9 3.0.1 /etc/pki/tls/cert.pem
Red Hat Enterprise Linux 8 1.1.1 /etc/pki/tls/cert.pem
Red Hat Enterprise Linux 7 1.0.1 /etc/pki/tls/cert.pem
Red Hat Enterprise Linux 6 1.0.0-10 /etc/pki/tls/cert.pem
SUSE Linux Enterprise 15 1.1.0 /etc/ssl/certs
SUSE Linux Enterprise 11, 12 1.0.1 /etc/ssl/certs
Ubuntu 22.04, 23.04 3.0.2 /etc/ssl/certs
Ubuntu 20.04 1.1.1 /etc/ssl/certs
Ubuntu 18.04 1.1.0 /etc/ssl/certs
Ubuntu 16.04 1.0.2 /etc/ssl/certs
Ubuntu 14.04 1.0.1 /etc/ssl/certs
Alpine 3.17, 3.18 3.0.1 /etc/ssl/certs

Можно также указать шифрование в строке подключения с помощью параметра Encrypt при использовании SQLDriverConnect для подключения.

Настройка параметров поддержания активности TCP

Начиная с ODBC Driver 17.4, можно настроить частоту отправки драйвером пакетов проверки активности и их пересылки, если ответ не получен. Чтобы настроить, добавьте следующие параметры в раздел драйвера в odbcinst.ini или в раздел имени DSN в odbc.ini. При подключении с помощью имени DSN драйвер будет использовать параметры в разделе имени DSN, если они есть. В противном случае или если подключение выполняется только со строкой подключения, драйвер будет использовать параметры из раздела драйвера в odbcinst.ini. Если параметра нет в обоих расположениях, драйвер использует значение по умолчанию. Начиная с версии 17.8 драйвера ODBC в строке подключения можно указать ключевые слова KeepAlive и KeepAliveInterval.

  • KeepAlive=<integer> управляет частотой попыток протокола TCP проверить работоспособность неактивного подключения путем отправки пакета keep-alive. Значение по умолчанию — 30 секунд.

  • KeepAliveInterval=<integer> определяет интервал, разделяющий повторные передачи пакета keep-alive, пока не происходит получение ответа. Значение по умолчанию составляет 15 секунд.

См. также