*Redis acl-setuser 命令
*语法
ACL SETUSER username [rule [rule ...]]
使用指定规则创建 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 教程 可能是更温和的 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:从用户可访问的键模式列表中移除所有键模式。\u0026<pattern>:(Redis 6.2 及更高版本中可用)将指定的 glob 风格模式添加到用户可访问的 Pub/Sub 频道模式列表。您可以向同一用户添加多个频道模式。示例:\u0026chatroom:*allchannels:\u0026*的别名,允许用户访问所有 Pub/Sub 频道。resetchannels:从用户可访问的 Pub/Sub 频道模式列表中移除所有频道模式。+<command>:将命令添加到用户可调用的命令列表。可与|一起使用以允许子命令(例如 "+config|get")。+@<category>:将指定类别中的所有命令添加到用户能够执行的命令列表。示例:+@string(添加所有字符串命令)。有关类别列表,请查看 ACL CAT 命令。+<command>|first-arg:允许特定禁用命令的特定第一个参数。仅支持没有子命令的命令,并且不允许以-开头的否定形式,只允许以+开头的加法形式。此功能已弃用,将来可能会移除。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:将指定的明文密码作为哈希密码添加到用户密码列表。每个用户可以有许多活动密码,以便密码轮换更简单。指定的密码不会以明文形式存储在服务器内部。示例:>mypassword。#<hashedpassword>:将指定的哈希密码添加到用户密码列表。Redis 哈希密码使用 SHA256 进行哈希处理,并转换为十六进制字符串。示例:#c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2。<password:类似于>password,但移除密码而不是添加。!<hashedpassword>:类似于#<hashedpassword>,但移除密码而不是添加。(<rule list>):(Redis 7.0 及更高版本中可用)创建一个新选择器以匹配规则。选择器按定义顺序进行评估。如果命令与用户权限或任何选择器匹配,则允许执行。有关更多信息,请参阅选择器。clearselectors:(Redis 7.0 及更高版本中可用)删除附加到用户的所有选择器。reset:移除用户的任何能力。设置为 off、无密码、无法执行任何命令、无法访问任何键。
*示例
> ACL SETUSER alan allkeys +@string +@set -SADD >alanpassword
+OK
> ACL SETUSER antirez heeyyyy
(error) ERR Error in ACL SETUSER modifier 'heeyyyy': Syntax error
*返回值说明
简单字符串回复: OK。
如果规则包含错误,则返回错误。