Подключение из 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 секунд.
См. также:
Linux odbc ini example
NAME
/etc/odbcinst.ini - An unixODBC drivers configuration
DESCRIPTION
FILE FORMAT
The general .ini file format is: [SectionName1] key1 = value1 key2 = value2 . [SectionName2] key1 = value1 key2 = value2 . Each ODBC driver has its own section and can be referred to by the name of its section. Recognized configuration keys are: Description A text string briefly describing the driver. Driver A filesystem path to the actual driver library. Setup A filesystem path to the driver setup library. FileUsage odbcinst(1) entry, if you edit the configuration file by hand, you have to supply it yourself. TEMPLATE FILES The recommended way to manage the drivers is using the odbcinst(1) utility. You can install the drivers by supplying it with template file, which has the same format as this file.
EXAMPLES
An example of the actual PostgreSQL driver: [PostgreSQL] Description = PostgreSQL driver for GNU/Linux Driver = /usr/lib/psqlodbcw.so Setup = /usr/lib/libodbcpsqlS.so FileUsage = 1 By specifying the driver like that, you can then reference it in the odbc.ini(5) as follows: Driver = PostgreSQL The recommended way to add that driver is by creating a template file containing: [PostgreSQL] Description = PostgreSQL driver for GNU/Linux Driver = /usr/lib/psqlodbcw.so Setup = /usr/lib/libodbcpsqlS.so and call the odbcinst(1): # odbcinst -i -d -f template.ini
SEE ALSO
AUTHORS
The authors of unixODBC are Peter Harvey pharvey@codebydesign.com> and Nick Gorham nick@lurcher.org>. For the full list of contributors see the AUTHORS file.
COPYRIGHT
unixODBC is licensed under the GNU Lesser General Public License. For details about the license, see the COPYING file.
© 2019 Canonical Ltd. Ubuntu and Canonical are registered trademarks of Canonical Ltd.