Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Управление доступом

В Tarantool предусмотрено гибкое управление доступом к ресурсам базы данных. Основные понятия системы управления доступом Tarantool:

  • Пользователь - это человек или программа, взаимодействующая с экземпляром Tarantool.
  • Объект - это сущность, к которой можно предоставить доступ, например, спейс, индекс или функция.
  • Привилегия – это право на выполнение определенных операций над конкретными объектами, например чтение, обновление данных или создание спейсов.
  • Роль – это именованный набор привилегий, который можно предоставить пользователю.

Обзор

Пользователи

Пользователь - это человек или программа, взаимодействующая с экземпляром Tarantool. Возможны разные типы пользователей, например:

  • Администратор базы данных, отвечающий за общее управление базой данных. Администратор может создавать других пользователей и предоставлять им привилегии.
  • Пользователь с ограниченным доступом к данным и хранимым функциям. Такие пользователи могут получать привилегии от администратора базы данных.
  • Пользователи, используемые для взаимодействия между экземплярами Tarantool. Например, такие пользователи могут быть созданы для обеспечения репликации и шардирования в кластере Tarantool.

В Tarantool есть два встроенных пользователя:

  • admin – пользователь со всеми доступными административными привилегиями. Если подключение использует порт административной консоли, текущим пользователем является admin. Например, admin используется при локальном подключении к экземпляру с помощью команды tt connect по имени экземпляра:

    $ tt connect app:instance001

    Чтобы разрешить удаленные подключения через бинарный порт от имени пользователя admin, задайте пароль.

  • guest – пользователь с минимальными привилегиями, используемый по умолчанию для удаленных подключений через бинарный порт. Например, guest используется при подключении к экземпляру командой tt connect по IP-адресу и порту без указания имени пользователя:

    $ tt connect 192.168.10.10:3301

Также см. пример.

Пароли

У любого пользователя (кроме guest) должен быть пароль. Если пароль не задан, пользователь не сможет подключаться к экземплярам Tarantool.

Хэши паролей Tarantool хранятся в системном спейсе _user. По умолчанию Tarantool использует протокол CHAP для аутентификации пользователей и применяет хэширование SHA-1 к паролям. Так, если пароль - 123456, его сохраненный хэш выглядит как строка a7SDfrdDKRBe5FaN2n3GftLKKtk=. В Tarantool Enterprise Edition можно включить PAP- аутентификацию с алгоритмом хэширования SHA256.

В Tarantool Enterprise Edition предусмотрены средства повышения безопасности базы данных: обязательное использование надежных паролей, ограничение срока действия пароля и т. д. Подробнее см. в разделе Аутентификация.

Объекты

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

Ниже приведено несколько примеров объектных типов:

  • universe представляет собой базу данных (box.schema) которая содержит объекты базы данных, включая спейсы, индексы, пользователей, роли, последовательности и функции. Предоставление привилегий на тип universe дает пользователю доступ к любому объекту в базе данных.
  • space позволяет предоставлять привилегии для пользовательских или системных спейсов.
  • function позволяет предоставлять привилегии для функций.

Привилегии

Привилегии, предоставленные пользователю, определяют, какие операции он может выполнять, например:

  • Привилегии read и write, предоставленные на объект space, позволяют пользователю читать или изменять данные в указанном спейсе.
  • Привилегия create, предоставленная на объект space, позволяет пользователю создавать новые спейсы.
  • Привилегия execute, предоставленная на объект function, позволяет пользователю выполнять указанную функцию.
  • Привилегия session, предоставленная на объект universe, позволяет пользователю подключаться к экземпляру по IPROTO.
  • Привилегия usage, предоставленная на объект universe, позволяет пользователю использовать свои привилегии на объектах базы данных (например, читать, записывать и изменять спейсы).
  • Привилегия alter, предоставленная пользователю, позволяет ему изменять его собственные настройки, например, пароль.
  • Привилегия drop, предоставленная пользователю, позволяет ему удалять пользователей.

Обратите внимание, что некоторые привилегии могут требовать доступа на чтение и запись к определенным системным спейсам. Например, привилегия create, предоставленная на объект space, требует привилегий read и write для системного спейса _space. Аналогично, предоставление возможности создавать функции требует привилегий read и write на спейс _func.

Роли

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

В Tarantool предусмотрены следующие встроенные роли:

  • super – включает в себя все административные привилегии.

  • public - включает в себя привилегии на чтение. Эта роль автоматически назначается новым пользователям при их создании.

  • replication - может быть назначена пользователю, применяемому для обеспечения репликации в кластере.

  • sharding – может быть назначена пользователю, применяемому для обеспечения шардирования в кластере.

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

  • В этом примере пользователь получает привилегии без использования ролей:

    user1 ── privilege1    ├─── privilege2    └─── privilege3
  • В этом примере пользователь получает все привилегии, входящие в роль role1, а также отдельные привилегии, назначенные напрямую:

    user1 ── role1 ── privilege1    │        └─── privilege2    ├─── privilege3    └─── privilege4
  • В этом примере роль role2 назначается роли role1. Это означает, что пользователь с ролью role1 получит все привилегии обеих ролей - role1 и role2.

    user1 ── role1 ── privilege1    │        ├─── privilege2    │        └─── role2    │                 ├─── privilege3    │                 └─── privilege4    ├─── privilege5    └─── privilege6

Также см. пример.

Владельцы объектов

Владелец объекта базы данных – это пользователь, который его создал. Владельцем базы данных и объектов, созданных изначально (системных спейсов и пользователей по умолчанию), является пользователь. Владельцы автоматически получают привилегии на создаваемые ими объекты. Они могут назначить эти привилегии другим пользователям или ролям с помощью функций box.schema.user.grant() и box.schema.role.grant().

Сессии

Сессия - это состояние подключения к Tarantool. Сессия содержит:

  • Целочисленный идентификатор подключения.
  • Текущего пользователя, связанного с подключением.
  • Текстовое описание подключенного узла.
  • Локальное состояние, например Lua-переменные и функции.

В Tarantool одна сессия может выполнять несколько транзакций параллельно. Каждая транзакция идентифицируется уникальным целочисленным идентификатором, который можно получить в начале транзакции с помощью функции box.session.sync().

Минимальный набор разрешений в типовых сценариях Tarantool

В этом разделе приведён список минимально необходимых разрешений для следующих типовых сценариев работы с Tarantool.

Дополнительные ограничения и рекомендации, связанные с обновлением модуля crud, см. в разделе Обновление модуля crud.

Чтение и запись данных через модуль CRUD

CRUD передаёт на хранилище (storage) имя пользователя, от имени которого операция была инициирована на роутере. Внутренний вызов выполняется через служебного пользователя vshard, после чего CRUD переключается на переданного пользователя и выполняет операцию с его правами.

Начиная с версии crud 1.6.0 (crud-ee 1.7.3) операции с данными выполняются с правами пользователя, от имени которого инициирован запрос на роутере.

Права на стороне роутера

Не рекомендуется выдавать прикладному пользователю право execute на universe, так как оно позволяет выполнять произвольный Lua-код и существенно расширяет полномочия пользователя. Вместо этого следует выдавать execute точечно — только на необходимые методы crud.*, которые вызываются через lua_call:

credentials: users:   db_user:     password: 'secret'     privileges:       - permissions: [execute]         lua_call:           - crud.select           - crud.get           - crud.insert           - crud.replace           - crud.update           - crud.upsert           - crud.delete

Права на стороне хранилища

Минимальный набор прав для экземпляра хранилища зависит от используемой функциональности и версии CRUD.

  • Для чтения и записи данных пользователю требуются права на чтение и запись в пользовательские спейсы, например в спейс bands:

    box.schema.user.grant('db_user', 'read,write', 'space', 'bands')
  • Доступ к системным спейсам для маршрутизации:

    • read на _bucket — начиная с CRUD 1.7.0 требуется storage-операциям bucket_ref/unref для проверки состояния и принадлежности бакета.
    • При использовании DDL-метаданных требуется read на _ddl_sharding_key и _ddl_sharding_func.
    • Настройка прав на экземпляр хранилища через YAML:
      credentials:  users:    db_user:      password: 'secret'      privileges:        - permissions: [read]          spaces: [_bucket]        - permissions: [read]          spaces: [_ddl_sharding_key, _ddl_sharding_func]        - permissions: [read, write]          spaces: [bands]
  • Внутренние вызовы vshard/CRUD на экземпляр хранилища. В некоторых конфигурациях (в частности, на Tarantool 2.x или при ручной настройке прав) для выполнения внутренних вызовов на экземпляр хранилища может потребоваться право execute на набор служебных функций vshard.storage.*. Не рекомендуется выдавать право execute для области universe.

Управление пользователями

Создание пользователя

Чтобы создать нового пользователя, вызовите функцию box.schema.user.create(). В примере ниже пользователь создается без пароля:

/code_snippets/test/access_control/grant_user_privileges_test.lua

В этом примере пароль передается в параметре options:

/code_snippets/test/access_control/grant_user_privileges_test.lua

Изменение паролей

Чтобы задать или изменить пароль пользователя, используйте функцию box.schema.user.passwd(). В примере ниже пароль устанавливается для текущего авторизованного пользователя:

/code_snippets/test/access_control/grant_user_privileges_test.lua

Чтобы задать пароль для указанного пользователя, передайте имя пользователя и пароль, как показано ниже:

/code_snippets/test/access_control/grant_user_privileges_test.lua

Предоставление привилегий пользователю

Чтобы предоставить привилегии пользователю, используйте функцию box.schema.user.grant(). В примере ниже пользователю testuser предоставляются привилегии на чтение спейса writers и на чтение и запись спейса books:

/code_snippets/test/access_control/grant_user_privileges_test.lua

Подробнее о предоставлении привилегий для различных типов объектов см. в разделе Предоставление привилегий.

Получение информации о пользователе

Чтобы проверить, существует ли пользователь, вызовите функцию box.schema.user.exists():

box.schema.user.exists('testuser')--[[- true--]]

Чтобы получить информацию о привилегиях, предоставленных пользователю, вызовите функцию box.schema.user.info():

box.schema.user.info('testuser')--[[- - - execute    - role    - public  - - read    - space    - writers  - - read,write    - space    - books  - - session,usage    - universe    -  - - alter    - user    - testuser -–]]

В примере выше у пользователя testuser есть следующие привилегии:

  • Привилегия execute на роль public означает, что эта роль назначена пользователю.
  • Привилегия read на спейс writers означает, что пользователь может читать данные из этого спейса.
  • Привилегии read,write на спейс books означают, что пользователь может читать и изменять данные в этом спейсе.
  • Привилегии session,usage на universe означают следующее:
    • session: пользователь может аутентифицироваться через IPROTO-соединение.
    • usage: позволяет пользователю применять свои привилегии к объектам базы данных (например, читать и изменять данные в спейсе).
  • Привилегия alter позволяет пользователю testuser изменять собственные настройки, например, пароль.

Отзыв привилегий пользователя

Чтобы отозвать привилегии, используйте функцию box.schema.user.revoke(). В примере ниже отзывается привилегия на запись в спейс books:

/code_snippets/test/access_control/grant_user_privileges_test.lua

Отзыв привилегии session на объект universe приводит к запрету подключения пользователя к экземпляру Tarantool:

/code_snippets/test/access_control/grant_user_privileges_test.lua

Смена текущего пользователя

Имя текущего пользователя можно узнать с помощью функции box.session.user().

box.session.user()--[[- admin--]]

Текущего пользователя можно изменить:

  • Для подключения через административную консоль: с помощью функции box.session.su():

    box.session.su('testuser')box.session.user()--[[- testuser–]]
  • Для подключения через бинарный порт используйте команду AUTH протокола, поддерживаемую большинством клиентов.

  • При вызове хранимой функции через бинарный порт с помощью команды CALL: если для функции включено свойство SETUID, Tarantool временно заменяет текущего пользователя на создателя функции, предоставляя все его привилегии на время выполнения функции.

Удаление пользователей

Чтобы удалить пользователя, вызовите функцию box.schema.user.drop():

/code_snippets/test/access_control/grant_user_privileges_test.lua

Управление ролями

Создание роли

Чтобы создать новую роль, вызовите функцию box.schema.role.create(). В этом примере создаются две роли:

/code_snippets/test/access_control/grant_roles_test.lua

Предоставление привилегий роли

Чтобы назначить роли привилегии, используйте функцию box.schema.role.grant(). В примере ниже роли books_space_manager предоставляются привилегии на чтение и запись в спейс books:

/code_snippets/test/access_control/grant_roles_test.lua

В примере ниже роли writers_space_reader предоставляются привилегии на чтение спейса writers:

/code_snippets/test/access_control/grant_roles_test.lua

Подробнее о предоставлении привилегий на различные типы объектов см. в разделе Предоставление привилегий.

Назначение роли другой роли

Ролям можно назначать другие роли. В примере ниже вновь созданной роли all_spaces_manager назначаются все привилегии, назначенные ролям books_space_manager и writers_space_reader:

/code_snippets/test/access_control/grant_roles_test.lua

Назначение роли пользователю

Чтобы назначить роль пользователю, используйте функцию box.schema.user.grant(). В примере ниже пользователю testuser назначаются привилегии, назначенные ролям books_space_manager и writers_space_reader:

/code_snippets/test/access_control/grant_roles_test.lua

Получение информации о роли

Чтобы проверить существование роли, вызовите функцию box.schema.role.exists():

box.schema.role.exists('books_space_manager')--[[- true--]]

Чтобы получить информацию о привилегиях, назначенных роли, вызовите функцию box.schema.role.info():

box.schema.role.info('books_space_manager')--[[- - - read,write    - space    - books--]]

Если у роли есть привилегия execute на другие роли, это означает, что эти роли назначены данной родительской роли:

box.schema.role.info('all_spaces_manager')--[[- - - execute    - role    - books_space_manager  - - execute    - role    - writers_space_reader--]]

Отзыв роли у пользователя

Чтобы отозвать роль у пользователя, отзовите привилегию execute на эту роль с помощью функции box.schema.user.revoke(). В примере ниже у пользователя testuser отзывается роль books_space_reader:

/code_snippets/test/access_control/grant_roles_test.lua

Чтобы отозвать привилегии у роли, используйте функцию box.schema.role.revoke().

Удаление ролей

Чтобы удалить роль из системы, вызовите функцию box.schema.role.drop():

/code_snippets/test/access_control/grant_roles_test.lua

Предоставление привилегий

Чтобы предоставить привилегии пользователю или роли, используйте функции box.schema.user.grant() и box.schema.role.grant(), которые имеют похожие сигнатуры и принимают одинаковый набор аргументов. Например, сигнатура box.schema.user.grant() выглядит следующим образом:

box.schema.user.grant(username, permissions, object-type, object-name[, {options}])
  • username: имя пользователя, которому предоставляются указанные привилегии.

  • permissions: строковое значение, представляющее привилегии, предоставляемые пользователю. Если привилегий несколько, они перечисляются через запятую без пробелов.

  • object-type: объектный тип, на который предоставляются привилегии.

  • object-name: имя объекта, на который предоставляются привилегии. Если вместо object-name передать пустую строку ("") или nil, привилегии будут предоставлены на все объекты указанного типа.

Любой объект

В приведенном ниже примере пользователь testuser получает привилегии на создание объектов любого типа:

box.schema.user.grant('testuser','read,write,create','universe')

В этом примере пользователь testuser может предоставлять доступ к созданым им объектам:

box.schema.user.grant('testuser','write','space','_priv')

Спейсы

Создание и изменение спейсов

В примере ниже пользователю testuser предоставляются привилегии на создание спейсов:

box.schema.user.grant('testuser','create','space')box.schema.user.grant('testuser','write', 'space', '_schema')box.schema.user.grant('testuser','write', 'space', '_space')

Для создания спейсов также требуется привилегия write на некоторые системные спейсы.

Чтобы разрешить пользователю testuser удалять спейс со связанными объектами, добавьте ему следующие привилегии:

box.schema.user.grant('testuser','create,drop','space')box.schema.user.grant('testuser','write','space','_schema')box.schema.user.grant('testuser','write','space','_space')box.schema.user.grant('testuser','write','space','_space_sequence')box.schema.user.grant('testuser','read','space','_trigger')box.schema.user.grant('testuser','read','space','_fk_constraint')box.schema.user.grant('testuser','read','space','_ck_constraint')box.schema.user.grant('testuser','read','space','_func_index')

Создание и изменение индексов

В примере ниже пользователь testuser получает привилегии на создание индексов в спейсе writers:

box.schema.user.grant('testuser','create,read','space','writers')box.schema.user.grant('testuser','read,write','space','_space_sequence')box.schema.user.grant('testuser','write', 'space', '_index')

Чтобы разрешить пользователю testuser изменять индексы в спейсе writers, выдайте ему привилегии из примера ниже. Этот пример предполагает, что индексы в спейсе writers созданы не пользователем testuser.

box.schema.user.grant('testuser','alter','space','writers')box.schema.user.grant('testuser','read','space','_space')box.schema.user.grant('testuser','read','space','_index')box.schema.user.grant('testuser','read','space','_space_sequence')box.schema.user.grant('testuser','write','space','_index')

Если пользователь testuser создал индексы в спейсе writers, для их изменения достаточно выдать следующие привилегии:

box.schema.user.grant('testuser','read','space','_space_sequence')box.schema.user.grant('testuser','read,write','space','_index')

CRUD-операции

В этом примере пользователю testuser предоставляются привилегии на выбор данных из спейса writers:

box.schema.user.grant('testuser','read','space','writers')

В этом примере пользователю testuser разрешается читать и изменять данные в спейсе books:

box.schema.user.grant('testuser','read,write','space','books')

Последовательности

Создание и удаление последовательностей

В этом примере пользователь testuser получает привилегии на создание последовательностей:

box.schema.user.grant('testuser','create','sequence')box.schema.user.grant('testuser', 'read,write', 'space', '_sequence')

Чтобы разрешить пользователю testuser удалять последовательность, предоставьте ему следующие привилегии:

box.schema.user.grant('testuser','drop','sequence')box.schema.user.grant('testuser','write','space','_sequence_data')box.schema.user.grant('testuser','write','space','_sequence')

Использование функций последовательности

В этом примере пользователю testuser разрешено использовать функцию id_seq:next() для последовательности id_seq:

box.schema.user.grant('testuser','read,write','sequence','id_seq')

В следующем примере пользователю testuser разрешено использовать функции id_seq:set() или id_seq:reset() для последовательности id_seq:

box.schema.user.grant('testuser','write','sequence','id_seq')

Функции

Создание и удаление функций

В этом примере пользователь testuser получает привилегии на создание функций:

box.schema.user.grant('testuser','create','function')box.schema.user.grant('testuser','read,write','space','_func')

Чтобы разрешить пользователю testuser удалять функции, выдайте ему следующие привилегии:

box.schema.user.grant('testuser','drop','function')box.schema.user.grant('testuser','write','space','_func')

Выполнение функций

Чтобы разрешить пользователю testuser выполнять функцию с именем sum, выдайте ему следующие привилегии:

box.schema.user.grant('testuser','execute','function','sum')

Выполнение Lua-функций

Предоставление привилегии execute на объект типа lua_call дает пользователю возможность вызывать любую глобальную (доступную через Lua-таблицу _G) пользовательскую Lua-функцию с помощью запроса IPROTO_CALL. Чтобы предоставить привилегию на конкретную непостоянную функцию, указажите ее имя при выдаче привилегии lua_call.

function my_func_1() endfunction my_func_2() endbox.cfg({listen = 3301})box.schema.user.create('alice', {password = 'secret'})conn = require('net.box').connect(box.cfg.listen, {user = 'alice', password = 'secret'})box.schema.user.grant('alice', 'execute', 'lua_call', 'my_func_1')conn:call('my_func_1') -- okconn:call('my_func_2') -- access deniedbox.schema.user.grant('alice', 'execute', 'lua_call', 'box.session.su')conn:call('box.session.su', {'admin'}) -- ok

Пользователи

В этом примере пользователь testuser получает привилегии на создание других пользователей:

box.schema.user.grant('testuser','create','user')box.schema.user.grant('testuser', 'read,write', 'space', '_user')box.schema.user.grant('testuser', 'write', 'space', '_priv')

Роли

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

box.schema.user.grant('testuser','create','role')box.schema.user.grant('testuser', 'read,write', 'space', '_user')box.schema.user.grant('testuser', 'write', 'space', '_priv')

Выполнение кода

Чтобы пользователь testuser мог выполнять Lua-код, предоставьте ему привилегию execute на объект lua_eval:

box.schema.user.grant('testuser','execute','lua_eval')

Аналогично, для выполнения произвольного SQL-выражения требуется привилегия execute на объект sql:

box.schema.user.grant('testuser','execute','sql')

Пример

В примере ниже созданная Lua-функция выполняется от имени ее создателя, даже если она вызывается другим пользователем.

Сначала создаются два спейса (space1 и space2), и пользователю без пароля (private_user) предоставляется полный доступ к ним. Затем определяется функция read_and_modify, и пользователь private_user становится ее создателем. Наконец, другому пользователю (public_user) предоставляется привилегия на выполнение Lua-функций, созданных пользователем private_user.

box.schema.space.create('space1')box.schema.space.create('space2')box.space.space1:create_index('pk')box.space.space2:create_index('pk')box.schema.user.create('private_user')box.schema.user.grant('private_user', 'read,write', 'space', 'space1')box.schema.user.grant('private_user', 'read,write', 'space', 'space2')box.schema.user.grant('private_user', 'create', 'universe')box.schema.user.grant('private_user', 'read,write', 'space', '_func')function read_and_modify(key)  local space1 = box.space.space1  local space2 = box.space.space2  local fiber = require('fiber')  local t = space1:get{key}  if t ~= nil then    space1:put{key, box.session.uid()}    space2:put{key, fiber.time()}  endendbox.session.su('private_user')box.schema.func.create('read_and_modify', {setuid= true})box.session.su('admin')box.schema.user.create('public_user', {password = 'secret'})box.schema.user.grant('public_user', 'execute', 'function', 'read_and_modify')

Каждый раз, когда пользователь public_user вызывает эту функцию, она выполняется от имени ее создателя, private_user.

Все объектные типы и права доступа

Объектные типы

Тип объекта

Описание

universe

База данных (box.schema), содержащая объекты базы данных, включая спейсы, индексы, пользователей, роли, последовательности и функции. Предоставление привилегий на объект типа universe дает пользователю доступ к любому объекту в базе данных.

user

Пользователь.

role

Роль.

space

Спейс.

function

Функция.

sequence

Последовательность.

lua_eval

Выполнение произвольного Lua-кода.

lua_call

Вызов любой глобальной пользовательской Lua-функции.

sql

Выполнение произвольного SQL-выражения.

Права доступа

Привилегия

Тип объекта

Назначается ролям

Описание

read

Все

Да

Разрешает чтение данных указанного объекта. Например, эту привилегию можно использовать, чтобы разрешить пользователю выбирать данные из указанного спейса.

write

Все

Да

Разрешает обновление данных указанного объекта. Например, эту привилегию можно использовать, чтобы разрешить пользователю изменять данные в указанном спейсе.

create

Все

Да

Разрешает создание объектов указанного типа. Например, эту привилегию можно использовать, чтобы разрешить пользователю создавать новые спейсы. Обратите внимание, что эта привилегия требует привилегий read и write на определенные системные спейсы.

alter

Все

Да

Разрешает изменение объектов указанного типа. Обратите внимание, что эта привилегия требует привилегий read и write на определенные системные спейсы.

drop

Все

Да

Разрешает удаление объектов указанного типа. Обратите внимание, что эта привилегия требует привилегий read и write на определенные системные спейсы.

execute

role, universe, function, lua_eval, lua_call, sql

Да

Для role разрешает назначение указанной роли. Для других типов объектов разрешает вызов функции.

session

universe

Нет

Разрешает пользователю подключаться к экземпляру по IPROTO.

usage

universe

Нет

Разрешает пользователю использовать свои привилегии к объектам базы данных (например, читать, записывать и изменять спейсы).

Типы объектов и права доступа

Тип объекта

Подробности

universe

  • read: Разрешает чтение любых типов объектов, включая все спейсы или объекты последовательностей.
  • write: Разрешает изменение любых типов объектов, включая все спейсы или объекты последовательностей.
  • execute: Разрешает выполнение функций, Lua-кода или SQL-выражений, включая вызовы IPROTO.
  • session: Разрешает пользователю подключаться к экземпляру по IPROTO.
  • usage: Разрешает пользователю использовать свои привилегии к объектам базы данных (например, читать, записывать и изменять спейсы).
  • create: Разрешает создание пользователей, ролей, функций, спейсов и последовательностей. Эта привилегия требует привилегий read и write на определенные системные спейсы.
  • drop: Разрешает удаление пользователей, ролей, функций, спейсов и последовательностей. Эта привилегия требует привилегий read и write на определенные системные спейсы.
  • alter: Разрешает изменение настроек пользователей или объектов спейсов.

user

  • alter: Разрешает изменение описания пользователя, например, смену пароля.
  • create: Разрешает создание новых пользователей. Эта привилегия требует привилегий read и write на системный спейс _user.
  • drop: Разрешает удаление пользователей. Эта привилегия требует привилегий read и write на системный спейс _user.

role

  • execute: Указывает, что роль назначена пользователю или другой роли.
  • create: Разрешает создание новых ролей. Эта привилегия требует привилегий read и write на системный спейс _user.
  • drop: Разрешает удаление ролей. Эта привилегия требует привилегий read и write на системный спейс _user.

space

  • read: Разрешает выборку данных из спейса.
  • write: Разрешает изменение данных в спейсе.
  • create: Разрешает создание новых спейсов. Эта привилегия требует привилегий read и write на системный спейс _space.
  • drop: Разрешает удаление спейсов. Эта привилегия требует привилегий read и write на системный спейс _space.
  • alter: Разрешает изменение спейсов. Эта привилегия требует привилегий read и write на системный спейс _space. Если спейс создан пользователем, он может читать и записывать его без явного предоставления привилегий.

function

  • execute: Разрешает вызов функции.
  • create: Разрешает создание функции. Эта привилегия требует привилегий read и write на системный спейс _func. Если функция создана пользователем, он может выполнять ее без явного предоставления привилегий.
  • drop: Разрешает удаление функции. Эта привилегия требует привилегий read и write на системный спейс _func.

sequence

  • read: Разрешает использование последовательностей в space_obj:create_index().
  • write: Разрешает все операции с объектом последовательности. seq_obj:drop() требует привилегий write на системный спейс _priv.
  • create: Разрешает создание последовательностей. Эта привилегия требует привилегий read и write на системный спейс _sequence. Если последовательность создана пользователем, он может читать/записывать ее без явного предоставления привилегий.
  • drop: Разрешает удаление последовательностей. Эта привилегия требует привилегий read и write на системный спейс _sequence.
  • alter: Не имеет эффекта. seq_obj:alter() и другие методы требуют привилегию write.

lua_eval

  • execute: Разрешает выполнение произвольного Lua-кода с помощью запроса IPROTO_EVAL.

lua_call

  • execute: Разрешает выполнение любой пользовательской функции с помощью запроса IPROTO_CALL. Эта привилегия не разрешает пользователю вызывать встроенные Lua-функции (например, loadstring() или box.session.su()) и функции, определенные в системном спейсе _func.

sql

  • execute: Разрешает выполнение произвольного SQL-выражения с помощью запросов IPROTO_PREPARE и IPROTO_EXECUTE.