Top.Mail.Ru
box.space._vuser | Tarantool
 

box.space._vuser

box.space._vuser

box.space._vuser

_vuser — это системный спейс для виртуального представления. Структура его кортежей совпадает со структурой кортежей в _user, но права доступа на определенные кортежи ограничены в соответствии с правами пользователя. _vuser содержит только те кортежи, которые доступны текущему пользователю. Для получения более подробной информации о правах пользователя см. раздел Управление доступом.

Если у пользователя есть полный набор прав (как у пользователя „admin“), содержимое _vuser совпадает с содержимым _user. Если же у пользователя доступ ограничен, _vuser содержит только кортежи, которые доступны текущему пользователю.

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

Для начала запустите Tarantool и выдайте пользователю „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', {}]
...

Результат включает в себя тот же набор пользователей, как если бы вы выполнили запрос от пользователя „admin“ на своем экземпляре Tarantool’а.

Вернитесь в первый терминал и отмените права на чтение пользователю „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'
...

Тем не менее, если вместо этого произвести выборку из _vuser, отображаются данные пользователей, доступные пользователю „guest“:

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

Примечание

  • _vuser – это виртуальное представление системы, поэтому допускаются только запросы на чтение.
  • Если спейс _user требует наличия соответствующих прав доступа, то любой пользователь всегда может выполнить чтение из _vuser.