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

system_views

Представление системного спейса (или 'sysview') — копия системного спейса с доступом только для чтения.

Представления системных спейсов и соответствующие им системные спейсы:
_vcollation — представление _collation,
_vfunc — представление _func,
_vindex — представление _index,
_vpriv — представление _priv,
_vsequence — представление _sequence,
_vspace — представление _space,
_vspace_sequence — представление _space_sequence,
_vuser — представление _user.

Структура кортежей в представлении системного спейса идентична структуре кортежам соответствующего спейса. Однако права там обычно отличаются. По умолчанию у обычных пользователей в большинстве системных спейсов нет никаких прав, однако в представлениях системных спейсов у них есть право чтения.

Ситуация по умолчанию:

  • У роли 'public' есть право 'read' во всех представлениях системных спейсов, потому что именно так обстоят дела при создании базы данных.
  • У всех пользователей есть роль 'public', потому что она назначается им автоматически при выполнении box.schema.user.create().
  • В представлении системного спейса будут содержаться кортежи соответствующего системного спейса, только если у пользователя есть право, связанное с объектом, упомянутом в кортеже.
    Как результат, если администраторы не изменят права, у остальных пользователей не будет доступа к системному спейсу, но будет доступ к представлению системного спейса, где видны только доступные им объекты.

Например, пользователь 'admin' обычно имеет полный доступ к спейсу _space, поэтому и _vspace для него выглядит как _space. А 'guest' имеет только право на чтение _vspace, так что _vspace для него содержит меньше кортежей, чем _space. Поэтому в большинстве систем пользователю 'guest' чтобы получить список спейсов, следует делать выборку из _vspace.

Пример

В этом примере рассмотрим разницу между _vuser и _user. Представление _vuser содержит только кортежи, которые доступны текущему пользователю. Если же у пользователя есть полный набор прав (как у пользователя 'admin'), то содержимое _vuser совпадает с содержимым _user.

Чтобы посмотреть, как работает _vuser, подключитесь к базе данных Tarantool удаленно через net.box и выберите все кортежи из спейса _user — как при наличии, так и при отсутствии у пользователя 'guest' права на чтение из базы данных.

Запустите Tarantool и назначьте права read, write и execute пользователю guest:

tarantool> box.cfg{listen = 3301}---...tarantool> box.schema.user.grant('guest', 'read,write,execute', 'universe')---...

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

tarantool> conn = require('net.box').connect(3301)---...tarantool> conn.space._user:select{}---- - [0, 1, 'guest', 'user', {}]  - [1, 1, 'admin', 'user', {}]  - [2, 1, 'public', 'role', {}]  - [3, 1, 'replication', 'role', {}]  - [31, 1, 'super', 'role', {}]...

Будут показаны те же пользователи, как если бы вы отправили запрос из своего экземпляра Tarantool как 'admin'.

Переключитесь на первый терминал и отзовите право read у пользователя 'guest':

tarantool> box.schema.user.revoke('guest', 'read', 'universe')---...

Переключитесь на другой терминал, остановите сессию (чтобы остановить tarantool, нажмите Ctrl+C или Ctrl+D), запустите и подключитесь снова, а затем повторите запрос conn.space._user:select{}. Доступ будет запрещен:

tarantool> conn.space._user:select{}---- error: Read access to space '_user' is denied for user 'guest'...

Однако если вместо этого сделать select из _vuser, появятся данные пользователей, доступные пользователю 'guest':

tarantool> conn.space._vuser:select{}---- - [0, 1, 'guest', 'user', {}]...