TDB Documentation portal logo
Помощь
Обновлена 30 июня 2026 г. в 07:00

Работа со словарём с ограниченными правами

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

Содержание:

Пользователь словарей

Для выполнения операций со словарями не требуются широкие права доступа (super-права). Достаточно отдельного пользователя, который может:

  • выполнять операции чтения, записи, обновления и удаления данных в словарях через API модуля dictionary;
  • выгружать и загружать данные словарей с помощью команд tt export и tt import.

Пользователь словарей не имеет доступа к операциям модуля CRUD, а также к пользовательским спейсам и функциям приложения.

Для корректной работы со словарями требуется назначить такому пользователю в конфигурации роль dictionary_api_executor. Роль dictionary_api_executor разрешает вызов методов API словаря. Привилегии на спейсы позволяют работать с данными словарей и использовать команды tt export, tt import и tt connect. Узнать больше: Начало работы с модулем dictionary.

Пользователей словарей может быть несколько. В этом руководстве такой пользователь имеет название dictionary_user.

credentials:  users:    dictionary_user:      password: 'secret'      roles: [ dictionary_api_executor ]      privileges:        - permissions: [ read, write ]          spaces: [ dictionary_data, dictionary_vclock ]        - permissions: [ execute ]          universe: true

Пререквизиты

Для выполнения примера требуются:

  • установленный Docker-образ Tarantool DB;

  • приложение Docker Compose;

  • утилита tt CLI;

  • исходные файлы примера dictionary_user.

Запуск стенда и подключение к узлам

Для успешного запуска должны быть свободны следующие порты:

  • 2379
  • 3301–3308
  • 8081

Перейдите в папку с примером dictionary_user

cd ./docs/docs/ru/assets/examples/dictionary_user

Запустите стенд:

make start

Команда развернет стенд, который состоит из:

  • кластера Tarantool DB:
    • 2 роутера;
    • 2 набора реплик по 3 хранилища;
  • кластера etcd из 3 узлов;
  • 1 узла Tarantool Cluster Manager (TCM).

После запуска должны работать все контейнеры, кроме init_host.

Также после запуска кластера становится доступен веб-интерфейс TCM. Для входа в TCM откройте в браузере адрес http://localhost:8081. Логин и пароль для входа:

  • Username: admin
  • Password: secret

Все операции со словарями в примере ниже выполняются через пользователя dictionary_user.

Запись данных в словарь

Чтобы начать работу с базой данных через интерактивную консоль Tarantool, нужно подключиться к узлу кластера. В примере используется подключение в терминале с помощью утилиты tt CLI:

  • Terminal 1 — подключение к одному узлу кластера для записи данных;
  • Terminal 2 — подключение к другому узлу для проверки данных.

Для добавления новых элементов словаря подключитесь к кластеру в терминале (далее — Terminal 1) через пользователя словарей:

tt connect dictionary_user:secret@localhost:3301

В примере ниже задается словарь categories, который содержит категории денежных трат. Добавьте несколько элементов с соответствующими им ключами в словарь categories с помощью метода dictionary_router_set():

box.schema.func.call('dictionary_router_set', 'categories', '1', 'Shops')box.schema.func.call('dictionary_router_set', 'categories', '2', 'Food delivery')box.schema.func.call('dictionary_router_set', 'categories', '3', 'Transport')

Чтение данных с другого узла

Словари автоматически реплицируются между всеми узлами кластера. Чтобы проверить это, откройте вторую вкладку терминала (далее — Terminal 2) и подключитесь к другому узлу кластера:

tt connect dictionary_user:secret@localhost:3302

Проверьте записанные в словарь данные с помощью метода dictionary_router_get():

box.schema.func.call('dictionary_router_get', 'categories', '1')box.schema.func.call('dictionary_router_get', 'categories', '2')box.schema.func.call('dictionary_router_get', 'categories', '3')

Видно, что изменения словаря автоматически синхронизируются между всеми узлами кластера.

Выгрузка и загрузка словаря через утилиту tt CLI

Экспорт и импорт словарей можно использовать:

  • для переноса словарей между окружениями;
  • при восстановлении словарей из резервной копии;
  • для массового редактирования данных вне кластера.

Экспорт словаря

Выполните экспорт системных спейсов словарей, используя один из способов ниже (пример для узла хранилища localhost:3303):

  • tt export localhost:3303 dictionary_data:dictionary_data.csv \--username dictionary_user --password secret --header
  • tt export dictionary_user:secret@localhost:3303 \  dictionary_data:dictionary_data.csv --header

Редактирование данных вне кластера

Выгрузка словарей через tt export используется в тех случаях, когда требуется работать с содержимым словаря вне кластера, без прямого доступа к Tarantool.

Типовые сценарии:

  • Массовое наполнение или правка словаря — при добавлении или изменении большого количества записей;

  • Перенос словарей между окружениями — например, перенос из тестового окружения в staging или production без копирования прикладных данных;

  • Восстановление словарей из резервной копии — в случае потери данных или необходимости отката содержимого словаря к известному состоянию;

  • Подготовка данных в изолированной среде — если редактирование словаря должно происходить без доступа к кластеру (например, на локальной машине или в CI).

Во всех этих сценариях словарь выгружается в виде CSV-файлов, редактируется вне кластера, а затем загружается обратно с помощью tt import.

Обогащение CSV-файла словаря

После экспорта файл dictionary_data.csv можно дополнить новыми записями. Добавьте в словарь несколько новых категорий:

categories,4,Entertainment,11111111-1111-1111-1111-111111111111,1766583269000000000,00000000000000000000000000000000categories,5,Health,22222222-2222-2222-2222-222222222222,1766583269000000001,00000000000000000000000000000000categories,6,Education,33333333-3333-3333-3333-333333333333,1766583269000000002,00000000000000000000000000000000categories,7,Subscriptions,44444444-4444-4444-4444-444444444444,1766583269000000003,00000000000000000000000000000000

Таким образом можно массово дополнить словарь вне кластера, а затем загрузить обновлённые данные обратно с помощью tt import.

Полученные CSV-файлы можно отредактировать вручную, например добавить новые строки или изменить существующие значения. Этот шаг выполняется вне Tarantool и не требует доступа к кластеру.

Импорт обновлённых данных

После редактирования файлов загрузите их обратно в кластер, используя один из способов ниже (пример для другого узла хранилища localhost:3306):

  • tt import localhost:3306 --username dictionary_user \  --password secret dictionary_data.csv:dictionary_data --header
  • tt import dictionary_user:secret@localhost:3306 \  dictionary_data.csv:dictionary_data --header

Чтобы проверить загруженные данные словаря, подключитесь к любому узлу кластера. В примере используется подключение к узлу из Terminal 1:

tt connect dictionary_user:secret@localhost:3301

Затем проверьте записанные в словарь данные:

box.schema.func.call('dictionary_router_get', 'categories', '4')box.schema.func.call('dictionary_router_get', 'categories', '5')box.schema.func.call('dictionary_router_get', 'categories', '6')box.schema.func.call('dictionary_router_get', 'categories', '7')

Обновлённые значения доступны на всех узлах кластера.

Остановка стенда

Чтобы остановить стенд, выполните в локальном терминале следующую команду:

make stop