Redis的用户权限管理(ACL)功能

redis6.0发布了权限管理功能ACL(access control list 访问控制列表),可以对不同的用户设置不同的权限,限制用户可使用的命令,可访问的key等

一、acl基本操作

1、查看用户列表

127.0.0.1:6379> acl list 
1) "user bytebase on #9b2358a15017fdd851f4ec3202f01b3a196b15b4e80b33f4f7c7965df34ab702 #5e57191b471c8d644683a98a730608d1fa5f3248f5c8c96d5b376f5f63ee61e4 ~* &* +@all"
2) "user default on #5e57191b471c8d644683a98a730608d1fa5f3248f5c8c96d5b376f5f63ee61e4 ~* &* +@all"
127.0.0.1:6379> acl users
1) "bytebase"
2) "default"

2、查看当前使用的用户

127.0.0.1:6379>  ACL WHOAMI
"bytebase"

 3、获取指定用户详细权限信息

127.0.0.1:6379> ACL GETUSER default
 1) "flags"
 2) 1) "on"
    2) "allkeys"
    3) "allchannels"
    4) "allcommands"
 3) "passwords"
 4) 1) "5e57191b471c8d644683a98a730608d1fa5f3248f5c8c96d5b376f5f63ee61e4"
 5) "commands"
 6) "+@all"
 7) "keys"
 8) 1) "*"
 9) "channels"
10) 1) "*"

4、创建用户

使用acl setuser创建用户是不可用状态(off),没有密码(虽然没有nopass标记),并且没有任何权限(-@all)的

127.0.0.1:6379> ACL SETUSER user
OK
127.0.0.1:6379> acl list
1) "user default on nopass ~* &* +@all"
2) "user user off &* -@all

5、启用/禁用用户

禁用用户则为 ACL SETUSER 用户名 off

127.0.0.1:6379> ACL SETUSER user on
OK
127.0.0.1:6379> acl list
1) "user default on nopass ~* &* +@all"
2) "user user on &* -@all"

6、设置密码/取消密码

取消密码 acl setuser 用户名 <123456

127.0.0.1:6379> ACL SETUSER user >123456
OK
127.0.0.1:6379> acl list
1) "user default on nopass ~* &* +@all"
2) "user user on #bcb15f821479b4d5772bd0ca866c00ad5f926e3580720659cc80d39c9d09802a &* -@all"

7、查看acl所有命令

127.0.0.1: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"

8、查看集合指令得集合

127.0.0.1:6379> acl cat string
 1) "msetnx"
 2) "setrange"
 3) "strlen"
 4) "getrange"
 5) "setnx"
 6) "getset"
 7) "getdel"
 8) "setex"
 9) "mget"
10) "decrby"
11) "stralgo"
12) "get"
13) "append"
14) "mset"
15) "decr"
16) "psetex"
17) "substr"
18) "incrbyfloat"
19) "getex"
20) "set"
21) "incr"
22) "incrby"

9、增加/取消指定命令集合权限

# 无get、set权限会报以下错误,get是string类型数据的命令,我们来给user添加string类型数据的所有权限,多个类型命令用空格隔开

(error) NOPERM this user has no permissions to run the 'get' command or its subcomman

127.0.0.1:6379> ACL SETUSER user ~* +@string
OK
127.0.0.1:6379> acl list
1) "user default on nopass ~* &* +@all"
2) "user user on #bcb15f821479b4d5772bd0ca866c00ad5f926e3580720659cc80d39c9d09802a ~* &* -@all +@string"

上面user用户可以执行string的set命令的,我们来将这个权限去掉

127.0.0.1:6379> ACL SETUSER user -set
OK
127.0.0.1:6379> acl list
1) "user default on nopass ~* &* +@all"
2) "user user on #bcb15f821479b4d5772bd0ca866c00ad5f926e3580720659cc80d39c9d09802a ~* &* -@all +@string -set"

前面讲的+@xxx,-@xxx, +xxx, -xxx 讲的是增加删除命令集合的权限,增加删除子命令的权限,这些权限的key范围都是~*,也就是全部的key,很不安全。

可以限制key的范围,比如我们想让用户 user 只对以 onget: 开头的这些 key 有权限,这样设置:

127.0.0.1:6379> ACL SETUSER user resetkeys ~onget:*
OK
127.0.0.1:6379> acl lsit
1) "user default on nopass ~* &* +@all"
2) "user user on #bcb15f821479b4d5772bd0ca866c00ad5f926e3580720659cc80d39c9d09802a ~onget:* &* -@all +@string +hset +hlen +ttl -set"

10、持久化ACL配置

持久化ACL相关权限设置都保存到文件中,分为两个步骤

1.在redis配置文件中设置要导出的ACL配置文件全路径名,如下,注意ACL的配置文件名必须以.acl结尾

aclfile /home/redis6/users.acl

# 切记,这里一定要保证该文件已存在,可以使用 touch  /home/redis6/users.acl 来创建文件

2.执行 acl save

127.0.0.1:6379> ACL SAVE
OK 

 到该目录下查看该文件,可以发现和acl list看到的内容一致: 

[root@localhost redis6]# cat users.acl 
user default on nopass ~* &* +@all
user user on #bcb15f821479b4d5772bd0ca866c00ad5f926e3580720659cc80d39c9d09802a ~onget:* &* -@all +@string +hset +hlen +ttl -set

 3.从配置文件中读取ACL配置

首先在redis配置文件中设置ACL配置文件全路径名,然后在redis终端上运行命令 ACL LOAD 命令即可

我们接着第一步的操作,先删除刚才添加的用户user,再次从ACL配置文件中加载,如下

127.0.0.1:6379> ACL DELUSER user 
(integer) 1
127.0.0.1:6379> acl list
1) "user default on nopass ~* &* +@all"
127.0.0.1:6379> acl load
OK
127.0.0.1:6379> acl list
1) "user default on nopass sanitize-payload ~* &* +@all"
2) "user user on #bcb15f821479b4d5772bd0ca866c00ad5f926e3580720659cc80d39c9d09802a ~onget:* &* -@all +@string +hset +hlen +ttl -set"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值