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/