Работа со словарём с ограниченными правами
В этом руководстве показано, как работать со словарями через отдельного пользователя с минимально необходимыми правами.
Содержание:
- Пользователь словарей
- Пререквизиты
- Запуск стенда и подключение к узлам
- Запись данных в словарь
- Чтение данных с другого узла
- Выгрузка и загрузка словаря через утилиту tt CLI
- Остановка стенда
Для выполнения операций со словарями не требуются широкие права доступа (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')
Видно, что изменения словаря автоматически синхронизируются между всеми узлами кластера.
Экспорт и импорт словарей можно использовать:
- для переноса словарей между окружениями;
- при восстановлении словарей из резервной копии;
- для массового редактирования данных вне кластера.
Выполните экспорт системных спейсов словарей, используя один из способов ниже
(пример для узла хранилища 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.
После экспорта файл 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