Подключение к базе данных в кластере SQL Server
К хостам кластера Managed Service for SQL Server можно подключиться:
- Через интернет, если вы настроили публичный доступ для нужного хоста. К такому кластеру можно подключиться только используя SSL-соединение.
- С виртуальных машин Yandex.Cloud, расположенных в той же виртуальной сети. Если к кластеру нет публичного доступа, для подключения с таких ВМ SSL-соединение использовать необязательно.
Получение и установка SSL-сертификата
Чтобы использовать шифрованное SSL-соединение, необходимо получить SSL-сертификат и добавить его в хранилище доверенных сертификатов операционной системы:
$ sudo mkdir -p /usr/local/share/ca-certificates/Yandex && \
sudo wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" -O /usr/local/share/ca-certificates/Yandex/YandexCA.crt && \
sudo update-ca-certificates
Примеры строк подключения
Примеры проверялись в следующем окружении:
- Виртуальная машина в Yandex.Cloud c Ubuntu 20.04 LTS.
- Bash:
5.0.16
. - mono-complete:
6.8.0.105
. - Python:
3.8.2
; pip3:20.0.2
. - OpenJDK:
11.0.8
; Maven:3.6.3
. - PHP:
7.4.3
.
Пример команды с заполненным FQDN хоста вы можете посмотреть в консоли управления, нажав на кнопку Подключиться на странице кластера.
-
Установите зависимости:
$ sudo apt update && \ sudo apt install python3-pip python-is-python3 && \ pip3 install mssql-cli && \ source ~/.profile
-
По умолчанию Microsoft собирает анонимные данные об использовании клиентской утилиты
mssql-cli
, подробнее см. документацию утилиты mssql-cli. Чтобы отключить автоматический сбор данных, выполните команду:$ export MSSQL_CLI_TELEMETRY_OPTOUT=True
-
Подключитесь к базе данных:
$ mssql-cli -U <имя пользователя> \ -d <имя базы данных> \ -S <FQDN хоста>,1433
После выполнения команды введите пароль пользователя для завершения процедуры подключения.
-
Для проверки успешности подключения запросите версию СУБД SQL Server:
SELECT @@version;
-
Установите зависимости:
$ sudo apt update && \ sudo apt install python3-pip python-is-python3 && \ pip3 install mssql-cli && \ source ~/.profile
-
По умолчанию Microsoft собирает анонимные данные об использовании клиентской утилиты
mssql-cli
, подробнее см. документацию утилиты mssql-cli. Чтобы отключить автоматический сбор данных, выполните команду:$ export MSSQL_CLI_TELEMETRY_OPTOUT=True
-
Подключитесь к базе данных:
$ mssql-cli -U <имя пользователя> \ -d <имя базы данных> \ -S <FQDN хоста>,1433 \ -N
После выполнения команды введите пароль пользователя для завершения процедуры подключения.
-
Для проверки успешности подключения запросите версию СУБД SQL Server:
SELECT @@version;
-
Установите зависимости:
$ sudo apt update && \ sudo apt install mono-complete nuget && \ sudo nuget update -self && \ nuget install System.Data.SqlClient
-
Пример кода:
connect.cs
using System; using System.Data.SqlClient; namespace ConsoleApp1 { class Program { static void Main(string[] args) { var server = "<FQDN хоста>"; var database = "<имя базы данных>"; var uid = "<имя пользователя>"; var pwd = "<пароль пользователя>"; var connectionString = String.Format("Server={0},1433;Database={1};Uid={2};Pwd={3};Trusted_Connection=no;Encrypt=no;", server, database, uid, pwd); SqlConnection connection = new SqlConnection(connectionString); try { SqlCommand command = new SqlCommand("SELECT @@version;", connection); connection.Open(); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine(reader[0]); } } } catch (Exception e) { Console.WriteLine(e); throw; } finally { connection.Close(); } } } }
-
Сборка и подключение:
$ mcs connect.cs -r:System.Data.dll && \ mono connect.exe
При успешном подключении к кластеру и выполнении тестового запроса будет выведена версия SQL Server.
-
Установите зависимости:
$ sudo apt update && \ sudo apt install mono-complete nuget && \ sudo nuget update -self && \ nuget install System.Data.SqlClient
-
Пример кода:
connect.cs
using System; using System.Data.SqlClient; namespace ConsoleApp1 { class Program { static void Main(string[] args) { var server = "<FQDN хоста>"; var database = "<имя базы данных>"; var uid = "<имя пользователя>"; var pwd = "<пароль пользователя>"; var connectionString = String.Format("Server={0},1433;Database={1};Uid={2};Pwd={3};Trusted_Connection=no;Encrypt=yes;", server, database, uid, pwd); SqlConnection connection = new SqlConnection(connectionString); try { SqlCommand command = new SqlCommand("SELECT @@version;", connection); connection.Open(); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine(reader[0]); } } } catch (Exception e) { Console.WriteLine(e); throw; } finally { connection.Close(); } } } }
-
Сборка и подключение:
$ mcs connect.cs -r:System.Data.dll && \ mono connect.exe
При успешном подключении к кластеру и выполнении тестового запроса будет выведена версия SQL Server.
-
Установите зависимости:
$ sudo apt install default-jdk maven
-
Создайте директорию для проекта Maven:
$ cd ~/ && mkdir -p project/src/java/com/example && cd project/
-
Создайте конфигурационный файл для Maven:
pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>app</artifactId> <packaging>jar</packaging> <version>0.1.0</version> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>8.4.0.jre11</version> </dependency> </dependencies> <build> <finalName>${project.artifactId}-${project.version}</finalName> <sourceDirectory>src</sourceDirectory> <resources> <resource> <directory>src</directory> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <goals> <goal>attached</goal> </goals> <phase>package</phase> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.App</mainClass> </manifest> </archive> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <mainClass>com.example.App</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project>
-
Пример кода:
src/java/com/example/App.java
package com.example; import java.sql.*; public class App { public static void main(String[] args) { String server = "<FQDN хоста>"; String database = "<имя базы данных>"; String user = "<имя пользователя>"; String password = "<пароль пользователя>"; String connectionString = String.format( "jdbc:sqlserver://%s:1433;" + "database=%s;" + "user=%s;" + "password=%s;" + "encrypt=false;" + "trustServerCertificate=false;" + "loginTimeout=30;", server, database, user, password); try { Connection connection = DriverManager.getConnection(connectionString); ResultSet q = connection.createStatement().executeQuery("SELECT @@version;"); if(q.next()) {System.out.println(q.getString(1));} connection.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } }
-
Сборка и подключение:
$ mvn clean package && \ java -jar target/app-0.1.0-jar-with-dependencies.jar
При успешном подключении к кластеру и выполнении тестового запроса будет выведена версия SQL Server.
-
Установите зависимости:
$ sudo apt install default-jdk maven
-
Добавьте SSL-сертификат в хранилище доверенных сертификатов Java (Java Key Store), чтобы драйвер SQL Server мог использовать этот сертификат при защищенном подключении к хостам кластера. При этом задайте пароль в параметре
-storepass
для дополнительной защиты хранилища:$ cd /etc/security && \ sudo keytool -importcert -alias YandexCA -file /usr/local/share/ca-certificates/Yandex/YandexCA.crt -keystore ssl -storepass <пароль хранилища сертификатов> --noprompt
-
Создайте директорию для проекта Maven:
$ cd ~/ && mkdir -p project/src/java/com/example && cd project/
-
Создайте конфигурационный файл для Maven:
pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>app</artifactId> <packaging>jar</packaging> <version>0.1.0</version> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>8.4.0.jre11</version> </dependency> </dependencies> <build> <finalName>${project.artifactId}-${project.version}</finalName> <sourceDirectory>src</sourceDirectory> <resources> <resource> <directory>src</directory> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <goals> <goal>attached</goal> </goals> <phase>package</phase> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.App</mainClass> </manifest> </archive> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <mainClass>com.example.App</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project>
-
Пример кода:
src/java/com/example/App.java
package com.example; import java.sql.*; public class App { public static void main(String[] args) { String server = "<FQDN хоста>"; String database = "<имя базы данных>"; String user = "<имя пользователя>"; String password = "<пароль пользователя>"; String connectionString = String.format( "jdbc:sqlserver://%s:1433;" + "database=%s;" + "user=%s;" + "password=%s;" + "encrypt=true;" + "trustServerCertificate=false;" + "loginTimeout=30;", server, database, user, password); try { Connection connection = DriverManager.getConnection(connectionString); ResultSet q = connection.createStatement().executeQuery("SELECT @@version;"); if(q.next()) {System.out.println(q.getString(1));} connection.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } }
-
Сборка и подключение:
$ mvn clean package && \ java -jar target/app-0.1.0-jar-with-dependencies.jar
При успешном подключении к кластеру и выполнении тестового запроса будет выведена версия SQL Server.
-
Установите зависимости:
$ go get github.com/denisenkom/go-mssqldb
-
Пример кода:
import ( _ "github.com/denisenkom/go-mssqldb" "database/sql" ) connStr := ` server=<FQDN хоста>; port=1433; database=<имя базы данных>; user id=<имя пользователя>; password=<пароль пользователя> ` conn, err := sql.Open("sqlserver", connStr)
-
Установите зависимости:
$ go get github.com/denisenkom/go-mssqldb
-
Пример кода:
import ( _ "github.com/denisenkom/go-mssqldb" "database/sql" ) connStr := ` server=<FQDN хоста>; port=1433; database=<имя базы данных>; user id=<имя пользователя>; password=<пароль пользователя>; encrypt=true; TrustServerCertificate=false ` conn, err := sql.Open("sqlserver", connStr)
-
Установите зависимости:
$ sudo apt install unixodbc unixodbc-dev && \ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - && \ curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list && \ sudo apt update && \ sudo ACCEPT_EULA=Y apt install msodbcsql17
-
Пример кода:
[sqlserver] Driver={ODBC Driver 17 for SQL Server}; Server=<FQDN хоста>,1433; Database=<имя базы данных>; Uid=<имя пользователя>; Pwd=<пароль пользователя>; Encrypt=no; TrustServerCertificate=no; Connection Timeout=30;
-
Установите зависимости:
$ sudo apt install unixodbc unixodbc-dev && \ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - && \ curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list && \ sudo apt update && \ sudo ACCEPT_EULA=Y apt install msodbcsql17
-
Пример кода:
[sqlserver] Driver={ODBC Driver 17 for SQL Server}; Server=<FQDN хоста>,1433; Database=<имя базы данных>; Uid=<имя пользователя>; Pwd=<пароль пользователя>; Encrypt=yes; TrustServerCertificate=no; Connection Timeout=30;