Подключение из Linux или macOS
В этой статье описывается, как создать подключение к базе данных 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=<password>
.
Строка подключения выше будет эквивалентна строке подключения, определенной без ключевого слова DSN
, например: Driver=ODBC Driver 18 for SQL Server;Server=tcp:localhost,1433;Encrypt=yes;UID=my_username;PWD=<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 | Да | Сертификат сервера проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
No | Да | Да | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Да | No | Да | Сертификат сервера проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Да | Да | Да | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Strict | - | - | TrustServerCertificate игнорируется. Сертификат сервера проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Примечание.
Режим Strict доступен только для серверов, поддерживающих подключения по протоколу TDS 8.0.
ODBC Driver 17 и более ранних версий
Параметр шифрования | Надежный сертификат сервера | Принудительное шифрование на стороне сервера | Результат |
---|---|---|---|
No | No | 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 секунд.