Spec-Zone.ru › Redis

ACL

ACL SETUSER
Синтаксис
ACL SETUSER username [rule [rule ...]]
Доступно с версии:
6.0.0
Сложность по времени:
O(N). Где N — количество предоставленных правил.
Категории ACL:
@admin, @slow, @dangerous,

Создает пользователя ACL с указанными правилами или изменяет правила существующего пользователя.

Взаимодействует с пользователями Redis ACL. Если имя пользователя не существует, команда создаёт пользователя без каких-либо привилегий. Затем она считывает слева направо все правила, указанные как последовательные аргументы, устанавливая правила ACL пользователя, как указано. Если пользователь уже существует, указанные правила ACL просто применяются в дополнение к уже установленным правилам. Например:

ACL SETUSER virginia on allkeys +set

Вышеприведенная команда создаёт пользователя под именем virginia, который активен (правило on), может получить доступ к любым ключам (правило allkeys) и может вызывать команду set (правило +set). Затем можно использовать другой ACL SETUSER вызов для изменения правил пользователя:

ACL SETUSER virginia +get

Вышеуказанное правило применяет новое правило к пользователю virginia, поэтому помимо SET, пользователь virginia теперь также может использовать команду GET.

Начиная с Redis 7.0, правила ACL также могут быть сгруппированы в несколько отдельных наборов правил, называемых селекторами. Селекторы добавляются путём обертывания правил в скобки и предоставления их, как и любые другие правила. Для выполнения команды должно совпадать либо корневое разрешение (правила, определённые вне скобок), либо любой из селекторов (правила, определённые внутри скобок). Например:

ACL SETUSER virginia on +GET allkeys (+SET ~app1*)

Это задаёт пользователя с двумя наборами разрешений, один определён для пользователя, а другой определён с помощью селектора. Корневые разрешения пользователя позволяют выполнить только команду get, но могут быть выполнены для любых ключей. Селектор затем предоставляет дополнительный набор разрешений: доступ к команде SET для выполнения над любым ключом, начинающимся с app1. Использование нескольких селекторов позволяет предоставлять разрешения, которые различаются в зависимости от того, к каким ключам осуществляется доступ.

Когда мы хотим гарантировать создание пользователя с нуля, не заботясь о том, были ли у него ранее определённые связанные правила, мы можем использовать специальное правило reset в качестве первого правила, чтобы очистить все другие существующие правила:

ACL SETUSER antirez reset [... other rules ...]

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

> ACL SETUSER antirez reset
+OK
> ACL LIST
1) "user antirez off -@all"

Правила ACL — это либо слова, такие как «on», «off», «reset», «allkeys», либо специальные правила, начинающиеся со специального символа и следующие за другой строкой (без пробелов), например, «+SET».

Данное руководство — справочник по возможностям этой команды, но наш учебник по ACL может быть более подробным введением в работу системы ACL в целом.

Правила ACL

Правила Redis ACL разделены на две категории: правила, определяющие разрешения на команды, или правила команд, и правила, определяющие состояние пользователя или правила управления пользователями. Ниже приведен список всех поддерживаемых правил Redis ACL:

Правила команд

  • ~<pattern>: Добавляет указанный шаблон ключа (шаблон в стиле glob, как в команде KEYS), в список шаблонов ключей, доступных пользователю. Это предоставляет разрешения на чтение и запись к ключам, которые соответствуют шаблону. Вы можете добавить несколько шаблонов ключей для одного пользователя. Пример: ~objects:*
  • %R~<pattern>: (Доступно в Redis 7.0 и новее) Добавляет указанный шаблон ключей для чтения. Это работает аналогично обычному шаблону ключа, но предоставляет только разрешения на чтение из ключей, соответствующих данному шаблону. Подробнее см. разрешения на ключи.
  • %W~<pattern>: (Доступно в Redis 7.0 и новее) Добавляет указанный шаблон ключей для записи. Это работает аналогично обычному шаблону ключа, но предоставляет только разрешения на запись в ключи, соответствующие данному шаблону. Подробнее см. разрешения на ключи.
  • %RW~<pattern>: (Доступно в Redis 7.0 и новее) Псевдоним для ~<pattern>.
  • allkeys: Псевдоним для ~*, он позволяет пользователю получить доступ ко всем ключам.
  • resetkeys: Удаляет все шаблоны ключей из списка шаблонов ключей, к которым пользователь может получить доступ.
  • &<pattern>: (Доступно в Redis 6.2 и новее) Добавляет указанный шаблон в стиле glob в список шаблонов каналов Pub/Sub, доступных пользователю. Вы можете добавить несколько шаблонов каналов для одного пользователя. Пример: &chatroom:*
  • allchannels: Псевдоним для &*, он позволяет пользователю получить доступ ко всем каналам Pub/Sub.
  • resetchannels: Удаляет все шаблоны каналов из списка шаблонов каналов Pub/Sub, к которым пользователь может получить доступ.
  • +<command>: Добавляет команду в список команд, которые может вызывать пользователь. Может использоваться с | для разрешения подкоманд (например, "+config|get").
  • +@<category>: Добавляет все команды в указанной категории в список команд, которые пользователь может выполнить. Пример: +@string (добавляет все команды строк). Список категорий см. в команде ACL CAT.
  • +<command>|first-arg: Разрешает определённый первый аргумент в противном случае отключённой команды. Поддерживается только для команд без подкоманд и не допускается в отрицательной форме, как -SELECT|1, только в добавительной форме, начинающейся с "+". Эта функция устарела и может быть удалена в будущем.
  • allcommands: Псевдоним +@all. Добавляет все команды, которые есть в сервере, включая будущие команды, загруженные через модуль, для выполнения этим пользователем.
  • -<command>: Удаляет команду из списка команд, которые может вызывать пользователь. Начиная с Redis 7.0, может использоваться с | для блокировки подкоманд (например, "-config|set").
  • -@<category>: Аналогично +@<category> , но удаляет все команды в категории вместо их добавления.
  • nocommands: Псевдоним -@all. Удаляет все команды, и пользователь больше не может ничего выполнять.

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

  • on: Устанавливает пользователя как активного, теперь можно авторизоваться как этого пользователя с помощью AUTH <username> <password>.
  • off: Устанавливает пользователя как неактивного, теперь невозможно войти как этого пользователя. Обратите внимание, что если пользователь отключается (устанавливается в состояние «off») после того, как уже есть подключённые соединения, авторизованные с этим пользователем, соединения будут продолжать работать как ожидается. Чтобы также отключить старые соединения, можно использовать CLIENT KILL с опцией пользователя. Альтернативой является удаление пользователя с помощью ACL DELUSER, что приведёт к отключению всех подключений, авторизованных как удалённый пользователь.
  • nopass: Пользователь устанавливается как пользователь без пароля. Это означает, что с таким пользователем можно авторизоваться с любым паролем. По умолчанию специальный пользователь default установлен как «nopass». Правило nopass также сбросит все настроенные пароли для пользователя.
  • >password: Добавляет указанный открытый текст пароля как хэшированный пароль в список паролей пользователей. Каждый пользователь может иметь несколько активных паролей, что упрощает ротацию паролей. Указанный пароль не хранится в явном виде на сервере.
  • #<hashedpassword>: Добавляет указанный хэшированный пароль в список паролей пользователя. Хэширование пароля Redis выполняется с помощью SHA256 и преобразуется в шестнадцатеричную строку.
  • <password: Аналогично >password , но удаляет пароль вместо добавления.
  • !<hashedpassword>: Аналогично #<hashedpassword> , но удаляет пароль вместо добавления.
  • (<rule list>): (Доступно в Redis 7.0 и новее) Создаёт новый селектор для сопоставления правил. Селекторы оцениваются после разрешений пользователя и оцениваются в соответствии с порядком их определения. Если команда соответствует либо разрешениям пользователя, либо любому селектору, она разрешена. Дополнительные сведения см. в селекторах.
  • clearselectors: (Доступно в Redis 7.0 и новее) Удаляет все прикреплённые к пользователю селекторы.
  • reset: Удаляет любые возможности пользователя. Они устанавливаются в состояние «выключено», без паролей, неспособны выполнять никакие команды и получать доступ к каким-либо ключам.

Возврат

Простой строковый ответ: OK при успехе.

Если в правилах есть ошибки, возвращается ошибка.

Примеры

> ACL SETUSER alan allkeys +@string +@set -SADD >alanpassword
+OK

> ACL SETUSER antirez heeyyyy
(error) ERR Error in ACL SETUSER modifier 'heeyyyy': Syntax error

История

  • Начиная с версии Redis 6.2.0: Добавлены шаблоны каналов Pub/Sub.
  • Начиная с версии Redis 7.0.0: Добавлены селекторы и разрешения на основе ключей.

© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/acl-setuser/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API