背景

在Redis6.0之前的版本中,登陆Redis Server只需要输入密码(前提配置了密码 requirepass )即可,不需要输入用户名,而且密码也是明文配置到配置文件中,安全性不高。并且应用连接也使用该密码,导致应用有所有权限处理数据,风险也极高。在Redis6.0有了ACL之后,终于解决了这些不安全的因素,可以按照不同的需求设置相关的用户和权限。本文来介绍下Redis 6.0 ACL相关的配置和使用。具体的说明可以查看官方文档:ACL

说明

Redis ACL 是向后兼容的,即默认情况下用户为default,使用的是requirepass配置的密码。要是不使用ACL功能,对旧版客户端来说完全一样。Redis Auth可以有2种方式进行工作:

1:旧版本的使用方式,默认用户。兼容旧版本Redis的支持
AUTH <password>
2:新方式,还需要验证用户名
AUTH <username> <password>

因为需要验证用户名了,所以客户端的认证方式也多了参数:

--user <username>  验证用户名
--pass <password>  验证密码,是参数-a的别名;配合--user使用
--askpass          强制用户输入带有STDIN掩码的密码

现在开始来说明如何在Redis中根据ACL来定制需要的用户权限。首先看ACL的help,了解大致的使用方法:ACL help

ACL help
 1) ACL <subcommand> arg arg ... arg. Subcommands are:
 2) LOAD                             -- 从ACL文件中重新载入用户信息.
 3) SAVE                             -- 保存当前的用户配置信息到ACL文件.
 4) LIST                             -- 以配置文件格式显示用户详细信息.
 5) USERS                            -- 列出所有注册的用户名.
 6) SETUSER <username> [attribs ...] -- 创建或则修改一个用户.
 7) GETUSER <username>               -- 得到一个用户的详细信息.
 8) DELUSER <username> [...]         -- 删除列表中的用户.
 9) CAT                              -- 列出可用的类别.
10) CAT <category>                   -- 列出指定类别中的命令.
11) GENPASS [<bits>]                 -- 生成一个安全的用户密码.
12) WHOAMI                           -- 返回当前的连接用户.
13) LOG [<count> | RESET]            -- 显示ACL日志条目.

使用方法:
在创建用户之前,先说明下ACL的规则,首先看下一个完整的用户权限的格式:

> ACL LIST  --显示用户信息
1) "user default on #ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ~* +@all"

格式说明:

参数

说明

user

用户

default

表示默认用户名,或者自己定义的用户名

on

表示是否启用该用户,默认为off(禁用)

#…

表示用户密码,nopass表示不需要密码

~*

表示可以访问的Key(正则匹配)

+@

表示用户的权限,+/-表示授权还是销权; @为权限类。+@all 表示所有权限

Redis清除缓存
1.登录Redis:

redis-cli

2.输入用户名,密码:
Redis6.0默认用户名是default

AUTH  user pass

3.查看所有key值:

keys *

4.删除指定索引的值:

del key

5.清空整个Redis服务器的数据:

flushall

6.清空当前库中的所有key:

flushdb