Redis 6.0新特性——ACLs

Redis 6.0引入了ACLs,解决了过去权限管理的问题。ACLs允许精确控制连接的命令使用权限和键访问权限,通过定义用户和密码策略实现更安全的操作。最佳实践中,可以通过创建用户并设定特定权限,如限制某些命令或键的访问。ACLs的实现兼顾了性能,确保了与旧版本相近的速度。

Redis 6.0新特性介绍

在2019年纽约的Redis Day上,Salvatore Sanfilippo(AKA Antirez)介绍了即将发布的Redis 6.0的新特性。以下是关于ACLs听译的内容。

ACLs简介

在过去的十年中,Redis都会有这样的问题:

用户执行FLUSHALL,OK现在整个数据库就空了,或者执行DEBUG SEGFAULT,然后Redis的进程就crash退出了。

在以前解决这个问题的办法可能是在Redis配置中将危险命令进行rename:

rename-command FLUSHALL ""

这样将命令更名为随机字符串或者直接屏蔽掉,以满足需要。

缺少危险命令管理就会导致很多问题,比如当你使用网络上的一些库的时候,你压根就不知道别人会不会在里面加些FLUSHALL这样的命令,或者你也可以每次用外部代码都进行一轮Code Review。

当有了ACLs之后,你就可以控制比如:

这个连接只允许使用RPOPLPUSH这些命令,其他命令都无法调用。

是不是很方便?来看看ACLs是怎么工作的。

最佳实践

首先你要做的是定义用户。

当登录的时候,旧版本中默认用户(defaule user)是可以做任何事的,在Redis 6.0中你可以定义默认用户:

127.0.0.1:6379> ACL setuser antirez on >password1 >password2 >foobar +@all ~*
ACL setuser antirez on

setuseron表示启用此用户,off则是只定义一个不可用(unaccessable)的用户。

>password1 >password2 >foobar表示设置了3个密码,可以用来做密码轮换策略。

+@all表示用户可以使用所有权限,+后面跟命令权限如+get,或者+@后面跟某一类权限。

~*表示可用(accessable)的键名,这里是*也就是所有键都可被访问。

127.0.0.1:6379> ACL WHOAMI
"default"

现在是处于默认用户下的,切换用户:

127.0.0.1:6379> AUTH antirez foobar
OK

在以前AUTH后面是直接跟密码的,现在是用户名和密码。

127.0.0.1:6379> ACL WHOAMI
"antirez"

因为之前给这个用户设置的是所有命令可用+所有键可见,所以现在跟default用户没有什么区别:

127.0.0.1:6379> GET foo
(nil)
127.0.0.1:6379> SET foo bar
OK

现在去掉一些权限:

127.0.0.1:6379> ACL setuser antirez -SET

把这个用户的SET权限去掉后,就不能进行这个操作了:

127.0.0.1:6379> GET foo
"bar"
127.0.0.1:6379> SET foo 123
(error) NOPERM this user has no permissions to run the 'set' command or its subcommand

再来查看一下现在的ACL list:

127.0.0.1:6379> ACL list
1) "user antirez on >password1 >password2 >foobar ~* +@all -set"
2) "user default on nopass ~* +@all"

类似的,你也可以限制用户可以用任何命令但是却只能看部分键,如object*

备注

ACLs的实现使用了一些小技巧,像用上了命令的位图(commands’ bitmaps),以便让它不会在速度上有所下降。
不使用ACLs的话就和原来的Redis 5一样,使用ACLs当然会有一些额外的开销,但是它们非常小,你在benchmarks中不会察觉到新旧版本的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值