Минимальный набор разрешений в типовых сценариях
В этом разделе приведён список минимально необходимых разрешений для следующих типовых сценариев работы с Tarantool DB:
Полный список системных спейсов и описание того, зачем нужен доступ к ним, приведены в разделе Системные спейсы.
Начиная с версии crud 1.6.0 (crud-ee 1.7.3) операции с данными выполняются с правами пользователя, от имени которого инициирован запрос на роутере.
CRUD передает на сторону хранилища (storage) имя пользователя, который инициировал операцию на роутере. Внутренний вызов выполняется от имени служебного пользователя vshard, после чего CRUD переключается на переданного пользователя и выполняет операцию с его правами.
Для корректной работы методов CRUD пользователю, от имени которого выполняются обращения к кластеру через роутер, необходимо предоставить минимальный набор прав на каждом экземпляре хранилища.
Начиная с версии crud 1.6.0, выдайте пользователю необходимые права на пользовательские спейсы и, если применимо, на спейсы метаданных шардирования DDL.
Начиная с версии crud 1.7.0, также выдайте пользователю право read на спейс _bucket.
Выдавать прикладному пользователю право execute на universe не рекомендуется, так как оно позволяет выполнять
произвольный Lua-код и существенно расширяет полномочия пользователя.
Вместо этого следует выдавать права на выполнение (execute) точечно — только на необходимые методы crud.*, которые вызываются через lua_call.
На роутере зарегистрируйте только необходимые функции CRUD и выдайте прикладному пользователю право на их вызов:
local crud_functions = {'crud.select','crud.get','crud.insert','crud.replace','crud.update','crud.upsert','crud.delete',}for _, name in ipairs(crud_functions) dobox.schema.func.create(name, {setuid = false,if_not_exists = true,})box.schema.user.grant('db_user', 'execute', 'function', name,{if_not_exists = true})end
Минимальный набор прав для экземпляра хранилища зависит от используемой функциональности и версии CRUD.
Для чтения и записи данных пользователю требуются права на чтение и запись в пользовательские спейсы, например в спейс bands:
box.schema.user.grant('db_user', 'read,write', 'space', 'bands')
Доступ к системным спейсам, связанным с маршрутизацией запросов
-
Доступ на чтение (
read) к_bucket— начиная с CRUD 1.7.0, операцииbucket_ref/bucket_unrefна стороне хранилища требуют его для чтения карты сегментов, а также проверки состояния и принадлежности сегмента; -
Если используются метаданные маршрутизации на основе DDL, требуется доступ на чтение (
read) к системным спейсам_ddl_sharding_keyи_ddl_sharding_func.
Пример:
box.schema.user.grant('db_user', 'read', 'space', '_bucket')box.schema.user.grant('db_user', 'read', 'space', '_ddl_sharding_key')box.schema.user.grant('db_user', 'read', 'space', '_ddl_sharding_func')box.schema.user.grant('db_user', 'read,write', 'space', 'bands')
Внутренние вызовы vshard/CRUD на экземпляр хранилища
В некоторых конфигурациях (в частности, на Tarantool 2.x или при ручной настройке прав)
для выполнения внутренних вызовов на экземпляр хранилища может потребоваться право execute на набор служебных функций vshard.storage.*.
Выдавать прикладному пользователю право execute на universe не рекомендуется.