redis–21–ACL
1、简介
- Redis ACL是Access Control List(访问控制列表)的缩写。
- 用于权限控制
- 接入权限:用户名和密码
- 可以执行的命令
- 可以操作的 KEY
- 参考官网:https://redis.io/topics/acl
2、命令
2.1、acl list
展现用户权限列表
192.168.187.138:6379> acl list
1) "user default on nopass ~* &* +@all"
192.168.187.138:6379>
2.2、acl cat
2.2.1、查看添加权限指令类别
192.168.187.138:6379> acl cat
1) "keyspace"
2) "read"
3) "write"
4) "set"
5) "sortedset"
6) "list"
7) "hash"
8) "string"
9) "bitmap"
10) "hyperloglog"
11) "geo"
12) "stream"
13) "pubsub"
14) "admin"
15) "fast"
16) "slow"
17) "blocking"
18) "dangerous"
19) "connection"
20) "transaction"
21) "scripting"
2.2.2、加参数类型名可以查看类型下具体命令
192.168.187.138:6379> acl cat set
1) "spop"
2) "srandmember"
3) "sunion"
4) "sdiff"
5) "sunionstore"
6) "srem"
7) "sismember"
8) "smismember"
9) "sadd"
10) "scard"
11) "sort"
12) "smembers"
13) "sinter"
14) "sinterstore"
15) "smove"
16) "sdiffstore"
17) "sscan"
2.3、acl whoami
查看当前用户
192.168.187.138:6379> acl whoami
"default"
2.4、acl setuser
创建和编辑用户ACL
2.4.1、通过命令创建新用户默认权限
192.168.187.138:6379> acl setuser user1
OK
192.168.187.138:6379> acl list
1) "user default on nopass ~* &* +@all"
2) "user user1 off &* -@all"
192.168.187.138:6379>
2.4.2、设置有用户名、密码、ACL权限、并启用的用户
添加用户user3
启动用户user3
设置密码为:P123
ACL权限:get 操作只能 是 以user:开头的key
192.168.187.138:6379> acl whoami
"default"
192.168.187.138:6379> acl setuser user3 on >P123 ~user:* +get
OK
192.168.187.138:6379> acl list
1) "user default on nopass ~* &* +@all"
2) "user user3 on #1085c785640f6e22916e83742458171b3f4993a2d2bcd64ec840d419ece71b63 ~user:* &* -@all +get"
192.168.187.138:6379>
验证
# 登陆
192.168.187.138:6379> auth user3 P123
OK
# get 操作只能 是 以user:开头的key
192.168.187.138:6379> get a
(error) NOPERM this user has no permissions to access one of the keys used as arguments
192.168.187.138:6379> get user:1
(nil)
3、ACL规则
3.1、启动/禁用用户
on
激活某用户账号
off
- 禁用某用户账号。
- 注意,已验证的连接仍然可以工作。
- 如果默认用户被标记为off,则新连接将在未进行身份验证的情况下启动,并要求用户使用AUTH选项发送AUTH或HELLO,以便以某种方式进行身份验证。
3.2、权限的添加删除
+< command >
将指令添加到用户可以调用的指令列表中
-< command >
从用户可执行指令列表移除指令
+@< category >
- 添加该类别中用户要调用的所有指令,有效类别为@admin、@set、@sortedset…等
- 通过调用ACL CAT命令查看完整列表。
- 特殊类别@all表示所有命令,包括当前存在于服务器中的命令,以及将来将通过模块加载的命令。
-@< category >
从用户可调用指令中移除类别
allcommands
+@all的别名
nocommand
-@all的别名
3.3、可操作键的添加或删除
~< pattern >
添加可作为用户可操作的键的模式。
例如
~*:允许所有的键