Настройка окружения#

DataSpace Core (DSPC)#

Подготовка базы данных DSPC#

Для работы DataSpace требуется развернуть БД. Поддерживаются СУБД Pangolin (PSQL), PostgreSQL, а также Oracle Database. Для dev-тестов может использоваться H2 версии не ниже 1.4.200.

Рекомендуется использовать продукт Platform V Pangolin DB.

Примечание

Для именования объектов БД (учетных записей, ролей, схем, табличных пространств и т.д.) следует руководствоваться требованиями используемой СУБД для имен без использования кавычек. Обычно в допустимый набор символов входят латинские буквы (a-z, A-Z), цифры (0-9) и символ подчеркивания (_), имена должны начинаться с буквы или символа подчеркивания.

Создание учетных записей#

Для работы модулей DataSpace и для работы скриптов развертывания в БД необходимо создать технологические учетные записи (ТУЗ):

Имя ТУЗ PG

Имя ТУЗ Oracle

Назначение

Условия использования

as_admin

DSPC

Владелец схемы БД. Для работы скриптов развертывания DataSpace — создание объектов схемы БД средствами Liquibase

ТУЗ обязательна. При использовании Platform V Pangolin DB в роль as_admin включается заранее созданная доменная ТУЗ владельца схемы БД. Доменная ТУЗ с ролью as_admin, as_admin должна являться владельцем объектов БД, для этого перед выполнением DDL-команд должна выполняться команда set role as_admin

dsc_appl

DSC_APPL

Подключение к БД модуля dataspace-core, чтение и запись

ТУЗ обязательна. Исключение — локальная БД разработчика для целей тестирования DataSpace

dsa_appl

DSA_APPL

Подключение к БД модуля dataspace-applier, чтение и запись

ТУЗ опциональна — определяется потребителем. Нужна только при использовании функционального StandIn для возможности раздельного мониторинга основной и вспомогательной нагрузки и управления ресурсами на уровне БД

dss_appl

DSS_APPL

Подключение к БД модуля dataspace-search, чтение

ТУЗ опциональна — определяется потребителем. Нужна только при использовании отдельной конфигурации DataSpace в режиме search для возможности раздельного мониторинга основной и поисковой нагрузки и управления ресурсами на уровне БД

Создание схемы при использовании Pangolin (PSQL) или PostgreSQL#

Необходимо создать:

  • Кластер PostgreSQL.

  • Роли as_admin, as_TUZ (valid until указать в соответствии с требованиями). Роль as_admin будет являться владельцем схемы, как и в случае использования БД Platform V Pangolin DB.

     -- Скрипт выполняет DB admin c привилегией на создание ролей и пользователей
     CREATE USER as_admin WITH PASSWORD <пароль> LOGIN NOCREATEROLE NOCREATEDB NOSUPERUSER NOINHERIT NOREPLICATION NOBYPASSRLS VALID UNTIL '2099.12.31';
     CREATE USER "as_TUZ" WITH PASSWORD <пароль> LOGIN NOCREATEROLE NOCREATEDB NOSUPERUSER NOINHERIT NOREPLICATION NOBYPASSRLS VALID UNTIL '2099.12.31';
    
  • Каталоги Linuх для табличных пространств. Пользователь Linux Postgres должен иметь для них все права (mkdir /pgdata/11/ts/dspc_t; chown postgres /pgdata/11/ts/dspc_t; chmod u+rwx /pgdata/11/ts/dspc_t).

  • Табличные пространства необходимого размера, БД и схему. Необходимо выдать права владельца.

    -- Названия объектов БД и пути даны в качестве примера (обычно они подходят для типовой установки)
    -- Их необходимо проверить и заменить на актуальные
    -- 1) Создание табличного пространства. Выполняет DB admin.
    CREATE TABLESPACE dspc_t OWNER as_admin LOCATION '/pgdata/11/ts/dspc_t';
    GRANT CREATE ON TABLESPACE dspc_t TO as_admin;
    -- 1.1) Следующие 2 команды в случае, если для индексов используется отдельное табличное пространство.
    CREATE TABLESPACE dspc_i OWNER as_admin LOCATION '/pgdata/11/ts/dspc_i';
    GRANT CREATE ON TABLESPACE dspc_i TO as_admin;
    -- 2) Создаем БД. Выполняет DB admin
    CREATE DATABASE dspc_db OWNER as_admin ENCODING 'UTF-8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8' TABLESPACE dspc_t;
    -- в зависимости от локали в системе параметры LC_COLLATE и LC_CTYPE могут быть указаны с прописной utf-8. Команда для проверки:
    -- SELECT datname, datcollate, datctype FROM pg_database WHERE datname LIKE 'template%';
    GRANT ALL PRIVILEGES ON DATABASE dspc_db TO as_admin;
    -- 3) Создаем схему. Выполняет DB admin или as_admin
    CREATE SCHEMA dspc AUTHORIZATION as_admin;
    REVOKE ALL ON SCHEMA public FROM public;
    GRANT ALL PRIVILEGES ON SCHEMA dspc TO as_admin;
    ALTER DEFAULT PRIVILEGES IN SCHEMA dspc GRANT ALL PRIVILEGES ON TABLES TO as_admin;
    GRANT USAGE ON SCHEMA dspc TO "as_TUZ";
    GRANT SELECT, UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA dspc TO "as_TUZ";
    ALTER DEFAULT PRIVILEGES IN SCHEMA dspc GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO "as_TUZ";
    ALTER ROLE as_admin SET search_path to 'dspc';
    -- 4) Назначаем as_admin владельцем схемы (опционально, если схему создавала УЗ с ролью as_admin)
    ALTER SCHEMA dspc OWNER TO as_admin;
    
  • ТУЗ владельца схемы — dspc. ТУЗ приложения — dsc_appl, dsa_appl, dss_appl. Выдать ТУЗ права DML на таблицы схемы DML.

    -- Выполняет DB admin с привилегиями на создание ролей
    -- ТУЗ для Liquibase
    CREATE USER dspc WITH ENCRYPTED PASSWORD <пароль> NOINHERIT;
    ALTER ROLE dspc SET search_path to 'dspc';
    GRANT as_admin TO dspc;
    ALTER ROLE dspc SET ROLE TO as_admin; -- as_admin является владельцем схемы
    -- ТУЗ для модуля dataspace-core
    CREATE USER dsc_appl WITH ENCRYPTED PASSWORD <пароль> INHERIT;
    GRANT "as_TUZ" TO dsc_appl;
    ALTER ROLE dsc_appl SET search_path to 'dspc';
    -- ТУЗ для модуля dataspace-applier  — если необходимо
    CREATE USER dsa_appl WITH ENCRYPTED PASSWORD <пароль> INHERIT;
    GRANT "as_TUZ" TO dsa_appl;
    ALTER ROLE dsa_appl SET search_path to 'dspc';
    -- ТУЗ для модуля dataspace-search  — если необходимо
    CREATE USER dss_appl WITH ENCRYPTED PASSWORD <пароль> INHERIT;
    GRANT USAGE ON SCHEMA dspc TO dss_appl;
    ALTER ROLE dss_appl SET search_path to 'dspc';
    GRANT SELECT ON ALL TABLES IN SCHEMA dspc TO dss_appl;
    ALTER DEFAULT PRIVILEGES IN SCHEMA dspc GRANT SELECT ON TABLES TO dss_appl;
    

Создание схемы при использовании Oracle#

Необходимо выполнить следующие действия:

  1. Создать экземпляр БД Oracle.

  2. Создать табличные пространства DSPC_T, DSPC_I необходимого размера (при использовании LOB-типов данных — также табличное пространство DSPC_L).

  3. Создать ТУЗ владельца схемы — DSPC (схема будет называться также).

  4. Дать ТУЗ DSPC QUOTA UNLIMITED на оба табличных пространства.

  5. Дать ТУЗ DSPC привилегии на создание объектов схемы grant CREATE TABLE, CREATE VIEW, CREATE TRIGGER to DSPC.

  6. Создать роли DSPC_ROLE, DSPC_READ_ROLE.

  7. Создать ТУЗ приложения — DSC_APPL, DSA_APPL, DSS_APPL.

  8. Дать ТУЗ права на таблицы схемы DML.

  9. При необходимости создать logon-триггеры для выбора в качестве рабочей схемы DSPC.

Для выполнения вышеуказанных пунктов 2-7 можно использовать скрипт инициализации: схема и ТУЗ (подставить необходимые параметры tablespace, имена схем и ТУЗ):

-- replace placeholder ${default_password} with actual value
-- create tablespace — assign real names and locations and size
CREATE TABLESPACE dspc_t DATAFILE 'dspc_t' SIZE  10G AUTOEXTEND ON ONLINE;
CREATE TABLESPACE dspc_i DATAFILE 'dspc_i' SIZE  10G AUTOEXTEND ON ONLINE;

-- create schema owner
CREATE USER dspc
IDENTIFIED BY ${default_password}
DEFAULT TABLESPACE dspc_t
TEMPORARY TABLESPACE TEMP;			

-- assign quota
alter user dspc QUOTA UNLIMITED ON dspc_t;
alter user dspc QUOTA UNLIMITED ON dspc_i;
-- allow login
grant CREATE SESSION, ALTER SESSION to dspc;
-- allow object creation
grant CREATE TABLE, CREATE VIEW, CREATE TRIGGER to dspc;	

-- create role for TUZ
create role dspc_role;
create role dspc_read_role;

-- create dsc_appl TUZ
CREATE USER dsc_appl
IDENTIFIED BY ${default_password}
PASSWORD EXPIRE
DEFAULT TABLESPACE dspc_t
TEMPORARY TABLESPACE TEMP;

grant dspc_role to dsc_appl;
alter user dsc_appl default role ALL;
grant CREATE SESSION, ALTER SESSION to dsc_appl;

-- create dsa_appl TUZ
CREATE USER dsa_appl -- если необходимо
IDENTIFIED BY ${default_password}
PASSWORD EXPIRE
DEFAULT TABLESPACE dspc_t
TEMPORARY TABLESPACE TEMP;

grant dspc_role to dsa_appl;
alter user dsa_appl default role ALL;
grant CREATE SESSION, ALTER SESSION to dsa_appl;

-- create dss_appl TUZ — если необходимо
CREATE USER dss_appl
IDENTIFIED BY ${default_password}
PASSWORD EXPIRE
DEFAULT TABLESPACE dspc_t
TEMPORARY TABLESPACE TEMP;

grant dspc_read_role to dss_appl;
alter user dss_appl default role ALL;
grant CREATE SESSION, ALTER SESSION to dss_appl;

Для выполнения пункта 9 можно использовать скрипт создания logon-триггеров:

create or replace trigger dsc_appl.set_default_schema_dsc_appl
after logon on dsc_appl.schema
begin
  execute immediate 'alter session set current_schema=dspc';
end;
/
create or replace trigger dsa_appl.set_default_schema_dsa_appl
after logon on dsa_appl.schema
begin
  execute immediate 'alter session set current_schema=dspc';
end;
/
create or replace trigger dss_appl.set_default_schema_dss_appl
after logon on dss_appl.schema
begin
  execute immediate 'alter session set current_schema=dspc';
end;
/

Для выполнения пункта 8 после каждого выполнения job создания/обновления схемы необходимо выполнять скрипт по грантованию доступов для ролей dspc_role и dspc_read_role:

declare
  granttorole varchar2(254);
  granttoreadrole varchar2(254);
begin
	granttorole := 'dspc_role';
	granttoreadrole := 'dspc_read_role';
	for i in (select t.table_name
				from sys.all_tables t
				where t.owner = USER
				  and NOT (t.table_name like ('DATABASECHANGE%')))
	loop
		execute immediate 'grant SELECT, INSERT, UPDATE, DELETE ON ' || i.table_name || ' to ' || granttorole;
		execute immediate 'grant SELECT ON ' || i.table_name || ' to ' || granttoreadrole;
	end loop;
end;
/

Для создания ролей/схемы Postgres/Oracle для случаев вне Динамической инфраструктуры необходимо перечисленные скрипты выполнять отдельными шагами с возможностью выбора УЗ, под которой их выполнять.

Примечание

Использование второго табличного пространства (под индексы) является необязательным. В этом случае в параметрах, где требуется второе табличное пространство, можно указывать первое (dspc_t).

При развертывании на БД Oracle при использовании Binary или Text-атрибутов (BLOB/CLOB полей) целесообразно создать третье табличное пространство dspc_l, в котором будут создаваться LOB-объекты.

В job развертывания DataSpace указывается ТУЗ dspc и его пароль в качестве владельца схемы БД. Также указывается ТУЗ приложений dsc_appl, dsa_appl, dss_appl, табличные пространства dspc_t, dspc_i, dspc_l и имя схемы dspc.

Настройка соединения с БД в сервисах DataSpace#

В данном разделе описаны шаги настройки сервисов DataSpace и пространства Kubernetes (или OpenShift) для подключения БД (PostgreSQL или Oracle).

Необходимо выполнить следующие действия:

  1. Получить и настроить базу(ы) данных (см. раздел «Подготовка базы данных»).

  2. Создать secret(s) с параметрами подключения к базе(-ам) данных в Kubernetes (или OpenShift). Смотрите раздел «Создание secret для базы данных в Kubernetes (или OpenShift)».

  3. Обеспечить доступ из пространства Kubernetes (или OpenShift) к базе(-ам) данных.

  4. Передать в параметры названия созданных secrets в сервисы DataSpace при развертывании в Kubernetes (или OpenShift). Названия параметров:

    • helm:

         appConfig:
           db:
             main:
               secret: "main-db-secret" # имя созданного secret базы данных main
             standin:
               secret: "standin-db-secret" # имя созданного secret базы данных функционального standin 
      

Создание secret для базы данных в Kubernetes (или OpenShift)#

Есть разные варианты хранения secrets: обычные secrets K8S/OpenShift и хранение в системе создания, хранения и распространения secrets HashiCorp Vault.

Для конфигурирования на стендах Kubernetes (или OpenShift) используются объекты secret, содержащие stringData c параметрами подключения. Создать secret можно через cli-приложение (OpenShift cli или kube_ctl).

Внимание!

Secrets для Main и StandIn базы данных отличаются по своему содержимому.

Примечание

В случае использования HashiCorp Vault конфигурация подключения к БД прописывается в ConfigMap приложения (в рамках использования pipeline от продукта Platform V DevOps Tools см. раздел «Настройка параметров подключения к БД»).

В нижеприведенных примерах используются следующие параметры для подключения к БД:

  • datasource.username — имя пользователя;

  • datasource.password — пароль пользователя;

  • datasource.url — jdbc-строка соединения с базой данных;

  • dbschema — имя схемы;

  • datasource.driver-class-name — имя драйвера для соединения с БД;

  • database-platform — имя диалекта БД;

  • hibernate.dialect — имя диалекта БД, аналогично значению database-platform.

В нижеприведенных примерах используются следующие параметры имени схемы:

  • dataspace.datasource.primary.dbschema — имя схемы БД основного (Main или Primary) контура, используемое DataSpace в различных механизмах работы.

  • dataspace.datasource.standin.dbschema — имя схемы БД контура StandIn, используемое DataSpace в различных механизмах работы.

  • spring.liquibase.default-schema — имя схемы БД для наката скриптов Liquibase на основной контур.

  • spring.liquibase.parameters.defaultSchemaName — имя схемы БД для заполнения плейсхолдеров ${defaultSchemaName} в changelog Liquibase для основного контура.

  • standin.liquibase.default-schema — имя схемы БД для наката скриптов Liquibase на StandIn.

  • standin.liquibase.parameters.defaultSchemaName — имя схемы БД для заполнения плейсхолдеров ${defaultSchemaName} в changelog Liquibase для StandIn.

  • spring.jpa.properties.hibernate.default_schema — имя схемы БД основного контура в Hibernate.

  • standin.jpa.properties.hibernate.default_schema — имя схемы БД StandIn в Hibernate.

Внимание!

По умолчанию параметры настроены таким образом, что все свойства, относящиеся к конкретному контуру, равны свойству dataspace.datasource.primary.dbschema для основного контура и dataspace.datasource.standin.dbschema для StandIn-контура. Таким образом, необходимо заполнять только параметры dataspace.datasource.primary.dbschema и dataspace.datasource.standin.dbschema. В случае использования одного основного контура, заполняется только параметр dataspace.datasource.primary.dbschema.

Пример secret для основной (Main) базы данных Pangolin (PSQL) или PostgreSQL#

Примечание

Параметры, не относящиеся к username, password или passphrase, задаются в ConfigMap сервиса:

kind: ConfigMap
apiVersion: v1
metadata:
  name: app-config
data:
  override.properties: |-
    spring.datasource.url=jdbc:postgresql://dataspace-core-deposit-16923100-pgdb:5432/dataspace
    dataspace.datasource.primary.dbschema=dspc
    spring.datasource.driver-class-name=org.postgresql.Driver
    spring.jpa.database-platform=sbp.com.sbt.dataspace.DataspacePostgreSQLDialect
    spring.jpa.properties.hibernate.dialect=sbp.com.sbt.dataspace.DataspacePostgreSQLDialect
    spring.jpa.properties.hibernate.timezone.default_storage=NORMALIZE
apiVersion: v1
kind: Secret
metadata:
  name: main-db-secret
stringData:
  secret.properties: |-
    spring.datasource.username=dsc_appl
    spring.datasource.password=<пароль>
Пример secret для StandIn базы данных Pangolin (PSQL) или PostgreSQL#

Примечание

Параметры, не относящиеся к username, password или passphrase, задаются в ConfigMap сервиса:

kind: ConfigMap
apiVersion: v1
metadata:
  name: app-config
data:
  override.properties: |-
    standin.datasource.url=jdbc:postgresql://dataspace-core-deals-17731375-standin-pgdb:5432/dataspace
    dataspace.datasource.standin.dbschema=dspc
    standin.datasource.driver-class-name=org.postgresql.Driver
    standin.jpa.database-platform=sbp.com.sbt.dataspace.DataspacePostgreSQLDialect
    standin.jpa.properties.hibernate.dialect=sbp.com.sbt.dataspace.DataspacePostgreSQLDialect
    standin.jpa.properties.hibernate.timezone.default_storage=NORMALIZE
apiVersion: v1
kind: Secret
metadata:
  name: standin-db-secret
stringData:
  secret.properties: |-
    standin.datasource.username=dsc_appl
    standin.datasource.password=<пароль>
Пример secret для основной (main) базы данных Oracle#

Примечание

Параметры, не относящиеся к username, password или passphrase, задаются в ConfigMap сервиса:

kind: ConfigMap
apiVersion: v1
metadata:
  name: app-config
data:
  override.properties: |-
    spring.datasource.url=jdbc:oracle:thin:@<ip-адрес>:1521:pprb
    dataspace.datasource.primary.dbschema=dspc
    spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
    spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
    spring.jpa.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
apiVersion: v1
kind: Secret
metadata:
  name: main-db-secret
stringData:
  secret.properties: |-
    spring.datasource.username=dsc_appl
    spring.datasource.password=dsc_appl_password
Пример secret для StandIn базы данных Oracle#

Примечание

Параметры, не относящиеся к username, password или passphrase, задаются в ConfigMap сервиса:

kind: ConfigMap
apiVersion: v1
metadata:
  name: app-config
data:
  override.properties: |-
    standin.datasource.url=jdbc:oracle:thin:@<ip-адрес>:1521:pprbsi
    dataspace.datasource.standin.dbschema=dspc
    standin.datasource.driver-class-name=oracle.jdbc.OracleDriver
    standin.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
    standin.jpa.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
apiVersion: v1
kind: Secret
metadata:
  name: standin-db-secret
stringData:
  secret.properties: |-
    standin.datasource.username=dsc_appl
    standin.datasource.password=dsc_appl_password

DS Lab (DSLB)#

Подготовка базы данных DSLB#

Для работы DS Lab требуется развернуть БД. Поддерживается СУБД Pangolin (PSQL) или PostgreSQL (далее PostgreSQL или PG). Рекомендуется использовать продукт Platform V Pangolin DB, правообладателем которого является АО «СберТех» (см. раздел «Системные требования» документа «Руководство по установке» продукта Platform V DataSpace (APT)).

Примечание

Для именования объектов БД (учетных записей, ролей, схем, табличных пространств и т.д.) следует руководствоваться требованиями используемой СУБД в части имен без использования кавычек. Обычно в допустимый набор символов входят латинские буквы (a-z, A-Z), цифры (0-9) и символ подчеркивания (_), имена должны начинаться с буквы или символа подчеркивания.

Для подготовки БД ознакомьтесь с разделом Подготовка базы данных компонента DSPC.

Внимание!

Для компонента DSLB необходимо использовать отличную от используемой в компоненте DSPC базу данных и иную роль для подключения к БД.

Пример скрипта для создания роли:

CREATE ROLE dsl_appl WITH PASSWORD <пароль> LOGIN
CREATEDB CREATEROLE NOSUPERUSER;

GRANT ALL PRIVILEGES ON SCHEMA dslb TO dsl_appl WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON TABLESPACE dslb_t TO dsl_appl WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON database dslb_db TO dsl_appl WITH GRANT OPTION;

DS Admin Console (DSAC)#

Для данного компонента необходимо наличие в пространстве (namespace) Platform V DropApp (Kubernetes или OpenShift) сервиса DataSpace core, взаимодействие с которым настраивается согласно документа Установка компонента DataSpace Admin Console (DSAC).