Table of Contents

Проблема

У клиента есть приложение node.js на Ubuntu Linux, развернутое в Azure. Приложение использует SQL-базу, также размещенную в Azure.
Задача - выгрузить базу данных и приложение для того, чтобы организовать отладочную среду.
Задача несколько осложняется тем, что на сервере базы данных настроен firewall, ограничивающий доступ к базе с единственного хоста. Настроить firewall возможности нет.
Доступ к хосту на котором крутится приложение есть.

Экспорт-Импорт базы данных SQL из Azure

Для того, чтобы я смог подключиться к SQL-серверу с хоста не разрешенного в firewall, пришлось на хосте с приложением установить haproxy и настроить tcp-proxy до SQL-сервера в Azure:

frontend tcp-in-mssql
  bind :1433
  mode tcp
  use_backend mssql

backend mssql
  mode tcp
  server mssqlserver clientname.database.windows.net:1433 check

Теперь я смог подключиться к SQL-серверру в Azure, указав в качестве адреса SQL-сервера адрес хоста с приложением.
Для того, чтобы экспортировать базу нужно:

  1. Создать на локальном SQL-сервере пустую базу данных.
  2. Кликнуть правой кнопкой по пустой базе и выбрать Tasks → Import Data…
  3. В качестве Data Source выбрать .Net Framework Data Provider for SqlServer, а в поле Data → Connection String написать такое:
    Data Source=app.hostname.com;Initial Catalog=Web_db;User ID=user;Password=*********;

    и нажать Next>

  4. В качестве Destination выбрать .Net Framework Data Provider for SqlServer, и заполнить поле Data → Connection String аналогично, указав данные локального сервера:

    Data Source=localsqlhost;Initial Catalog=Web_db;

    и, если используется интегрированная аутентификация, укажем ее тип:

    Authentication="Active Directory Integrated";

    или логин/пароль в случае SQL-аутентификации. Также, возможно, понадобится выставить Security→TrustServerCertificate = True. Жмем Next.

  5. Дальше выбираем Copy Data from one or more tables or views
  6. Выбираем все объекты БД, жмем Next, ставим галочку Run immidiatellyNextFinish!.