box.space._vuser
-
box.space.
_vuser
_vuser
– это системный спейс, который реализует виртуальное представление. Структура его кортежей совпадает со структурой кортежей в _user, но права доступа на определенные кортежи ограничены в соответствии с правами пользователя._vuser
содержит только те кортежи, которые доступны текущему пользователю. Для получения более подробной информации о правах пользователя см. раздел Управление доступом.Если у пользователя есть полный набор прав (как у пользователя „admin“), содержимое
_vuser
совпадает с содержимым_user
. Если же у пользователя доступ ограничен,_vuser
содержит только кортежи, которые доступны текущему пользователю.Чтобы посмотреть, как работать с
_vuser
, удаленно подключитесь к базе данных Tarantool’а с помощьюtarantoolctl
и сделайте выборку кортежей из спейса_user
в следующих ситуациях: когда пользователь „guest“ имеет и когда он не имеет права выполнять чтение данных из базы.Для начала запустите Tarantool и выдайте пользователю „guest“ права на чтение, запись и выполнение:
tarantool> box.cfg{listen = 3301} --- ... tarantool> box.schema.user.grant('guest', 'read,write,execute', 'universe') --- ...
Перейдите на другой терминал, подключитесь к экземпляру Tarantool’а и произведите выборку всех кортежей из спейса
_user
:$ tarantoolctl connect 3301 localhost:3301> box.space._user:select{} --- - - [0, 1, 'guest', 'user', {}] - [1, 1, 'admin', 'user', {}] - [2, 1, 'public', 'role', {}] - [3, 1, 'replication', 'role', {}] - [31, 1, 'super', 'role', {}] ...
Результат включает в себя тот же набор пользователей, как если бы вы выполнили запрос от пользователя „admin“ на своем экземпляре Tarantool’а.
Вернитесь в первый терминал и отмените права на чтение пользователю „guest“:
tarantool> box.schema.user.revoke('guest', 'read', 'universe') --- ...
Перейдите на другой терминал, остановите сессию (чтобы остановить
tarantoolctl
, нажмите Ctrl+C или Ctrl+D) и повторите запросbox.space._user:select{}
. В доступе отказано:$ tarantoolctl connect 3301 localhost:3301> box.space._user:select{} --- - error: Read access to space '_user' is denied for user 'guest' ...
Тем не менее, если вместо этого произвести выборку из
_vuser
, отображаются данные пользователей, доступные пользователю „guest“:localhost:3301> box.space._vuser:select{} --- - - [0, 1, 'guest', 'user', {}] ...
Примечание
_vuser
– это виртуальное представление системы, поэтому допускаются только запросы на чтение.- Если спейс
_user
требует наличия соответствующих прав доступа, то любой пользователь всегда может выполнить чтение из_vuser
.