Подключение из 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=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 :
Полную документацию по INI-файлам и odbcinst см. в документации unixODBC. Сведения о записях в файле odbc.ini , характерных для ODBC Driver for SQL Server и поддерживаемых в Linux и macOS, см. в статье Ключевые слова и атрибуты строки подключения и имени DSN.
Можно проверить, что драйвер работает, используя isql для проверки подключения или следующую команду:
bcp master.INFORMATION_SCHEMA.TABLES out OutFile.dat -S -U -P
Использование TLS/SSL
Для шифрования подключений к SQL Server можно использовать протокол TLS, ранее называемый SSL. TLS защищает имена пользователей и пароли SQL Server по сети. Кроме того, TLS проверяет идентификатор сервера для защиты от атак «злоумышленник в середине».
Включение шифрования повышает безопасность за счет снижения производительности.
Независимо от параметров для Encrypt и TrustServerCertificateучетные данные входа на сервер (имя пользователя и пароль) всегда шифруются. В следующей таблице показано действие параметров Encrypt и TrustServerCertificate.
ODBC Driver 18 и более поздних версий
Параметр шифрования | Надежный сертификат сервера | Принудительное шифрование на стороне сервера | Результат |
---|---|---|---|
Нет | Нет | Нет | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, не шифруются. |
Нет | Да | Нет | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, не шифруются. |
Да | Нет | Нет | Сертификат сервера проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Да | Да | Нет | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Нет | Нет | Да | Сертификат сервера проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Нет | Да | Да | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Да | Нет | Да | Сертификат сервера проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Да | Да | Да | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Strict | — | — | TrustServerCertificate игнорируется. Сертификат сервера проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Режим Strict доступен только для серверов, поддерживающих подключения по протоколу TDS 8.0.
ODBC Driver 17 и более ранних версий
Параметр шифрования | Надежный сертификат сервера | Принудительное шифрование на стороне сервера | Результат |
---|---|---|---|
Нет | Нет | Нет | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, не шифруются. |
Нет | Да | Нет | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, не шифруются. |
Да | Нет | Нет | Сертификат сервера проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Да | Да | Нет | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Нет | Нет | Да | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Нет | Да | Да | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Да | Нет | Да | Сертификат сервера проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Да | Да | Да | Сертификат сервера не проверяется. Данные, передаваемые между клиентом и сервером, шифруются. |
Если используется шифрование подключения, имя (или IP-адрес) в общем имени субъекта (CN) или альтернативном имени субъекта (SAN) в TLS/SSL-сертификате SQL Server должно точно совпадать с именем (или IP-адресом) сервера, указанным в строке подключения. Ключевое слово HostnameInCertificate (версия 18.0 и выше) можно использовать для указания альтернативного имени, используемого для сопоставления с именами в TLS/SSL-сертификате. Если это ключевое слово указано, TLS/SSL-сертификат SQL Server должен совпадать с одним из имен сервера или HostnameInCertificate .
По умолчанию зашифрованные соединения всегда проверяют сертификат сервера. Но при подключении к серверу с самозаверяющим сертификатом без использования строгого режима шифрования также добавьте параметр TrustServerCertificate , чтобы обойти проверку сертификата по списку доверенных центров сертификации:
Driver=;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 | 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, 22.10 | 3.0.2 | /etc/ssl/certs |
Ubuntu 20.04, 21.04, 21.10 | 1.1.1 | /etc/ssl/certs |
Ubuntu 18.04 | 1.1.0 | /etc/ssl/certs |
Ubuntu 16.04, 16.10, 17.10 | 1.0.2 | /etc/ssl/certs |
Ubuntu 14.04 | 1.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= управляет частотой попыток протокола TCP проверить работоспособность неактивного подключения путем отправки пакета keep-alive. Значение по умолчанию — 30 секунд.
- KeepAliveInterval= определяет интервал, разделяющий повторные передачи пакета keep-alive, пока не происходит получение ответа. Значение по умолчанию составляет 15 секунд.