redis用户权限管理 - ACL详解第三篇

 由于redis的ACL内容较多,故一共分为三篇博客

redis用户权限管理 - ACL详解第一篇_YZF_Kevin的博客-CSDN博客

redis用户权限管理 - ACL详解第二篇_YZF_Kevin的博客-CSDN博客

redis用户权限管理 - ACL详解第三篇_YZF_Kevin的博客-CSDN博客

简言

上一篇博客 redis用户权限管理 - ACL详解第二篇_YZF_Kevin的博客-CSDN博客

主要讲了redis中ACL对命令的分类,增删命令集合的权限,增删子命令的权限,设置key的范围等

这边博客开始,我们开始讲解ACL持久化和加载相关,以及其他一些杂项命令。各位一定要知道,如果像上两篇博客中那样,只是在redis终端设置ACL相关权限,那这些设置都是保存在redis内存中,一旦redis重启,这些设置就会全部失效,要想持久化必须保存成文件,redis的ACL已经为我们提供了这些功能

目录

1. 把ACL相关设置保存到文件

2. 从配置文件中读取ACL相关设置

3. ACL生成密码

4. ACL测试能否使用指定命令

详细

1. 把ACL相关设置保存到文件

如果想持久化保存ACL配置,也就是把ACL相关权限设置都保存到文件中,分为两个步骤

1. 在redis配置文件中设置要导出的ACL配置文件全路径名,我这里是设置到了redis的bin目录,文件名是users.acl,注意ACL的配置文件名必须以.acl结尾

redis用户权限管理 - ACL详解第三篇_第1张图片

2. 在redis终端上运行命令 ACL SAVE 命令即可,操作如下

127.0.0.1:6379> ACL LIST
1) "user default on nopass ~* &* +@all"
127.0.0.1:6379> 
127.0.0.1:6379> ACL SETUSER user1 on >123456
OK
127.0.0.1:6379> ACL SETUSER user1 (~* +get) (~testset:* +set)
OK
127.0.0.1:6379> ACL LIST
1) "user default on nopass ~* &* +@all"
2) "user user1 on #8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 resetchannels -@all (~* resetchannels -@all +get) (~testset:* resetchannels -@all +set)"

127.0.0.1:6379> ACL SAVE
OK

第一个命令,ACL LIST 查看权限,只有一个默认的default用户

第二个命令,ACL SETUSER user1 on >123456 用来新建一个用户user1,密码是123456

第三个命令,ACL SETUSER user1 (~* +get) (~testset:* +set) 给用户user1设置权限,权限1是对所有的key有get权限,权限2是对所有以testset:开头的key有set权限

第四个命令,ACL LIST 再次查看权限,现在已经有了用户user1的权限详情了

第五个命令,ACL SAVE 把所有的ACL权限保存到配置文件中,即redis.conf中配置的aclfile配置项

现在我们查看aclfile文件,如下图,可以看到users.acl文件中的内容和ACL LIST的结果完全一致 

root@ubuntu:/usr/local/redis/redis-7.0.0/bin# cat users.acl 
user default on nopass ~* &* +@all
user user1 on #8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 resetchannels -@all (~* resetchannels -@all +get) (~testset:* resetchannels -@all +set)
root@ubuntu:/usr/local/redis/redis-7.0.0/bin# 

2. 从配置文件中读取ACL相关设置

如果已经有了acl配置文件,想直接加载到redis中生效,也很简单,首先在redis配置文件中设置ACL配置文件全路径名,然后在redis终端上运行命令 ACL LOAD 命令即可

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

127.0.0.1:6379> ACL DELUSER user1
(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 ~* &* +@all"
2) "user user1 on #8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 resetchannels -@all (~* resetchannels -@all +get) (~testset:* resetchannels -@all +set)"

第一个命令,ACL DELUSER user1 删除刚才添加的用户user1

第二个命令,ACL LIST 查看权限,可以看到现在只剩下默认的default用户了

第三个命令,ACL LOAD 从redis配置文件的aclfile配置项指定的文件中加载ACL权限相关

第四个命令,ACL LIST 再次查看权限,可以看到现在已经有了用户user1的权限详情了,和users.acl文件中内容一致

3. ACL生成密码

给redis用户设置密码时,为了方便我们,ACL提供了自动生成密码的命令

格式:ACL GENPASS 选填位数     

127.0.0.1:6379> ACL GENPASS
"6cabfacab48f7a5d4c6627210acc1c6fc2312af1ae0a06f3241f2cbe8b8e223b"
127.0.0.1:6379> 
127.0.0.1:6379> ACL GENPASS 128
"2a770f6487e8d4e764fd4bc1c4de5a92"
127.0.0.1:6379> 
127.0.0.1:6379> ACL GENPASS 32
"9bde31d4"
127.0.0.1:6379>

第一个命令,ACL GENPASS 不填位数就默认产生256位也就是32字节的伪随机字符串,并转换为64字节长度的字符串,数字加字母

第二个命令,ACL GENPASS 128 产生128位的字符串,最终长度32字节

第二个命令,ACL GENPASS 32 产生32位的字符串,最终长度8字节

4. ACL测试能否使用指定命令

如果redis用户对自己能否使用某个命令不清楚,可以进行查询

格式:ACL DRYRUN 用户名 命令 参数

127.0.0.1:6379> ACL LIST
1) "user default on nopass ~* &* +@all"
2) "user user1 on #8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 resetchannels -@all (~* resetchannels -@all +get) (~testset:* resetchannels -@all +set)"
127.0.0.1:6379> 
127.0.0.1:6379> ACL DRYRUN user1 get name
OK
127.0.0.1:6379> ACL DRYRUN user1 set name 123
"This user has no permissions to access the 'name' key"
127.0.0.1:6379> ACL DRYRUN user1 set testset:1 123
OK

第一个命令,ACL LIST 查看权限,可以看到用户user1的权限有两个,1:对所有的key拥有get权限,2:对以testset:*开头的key拥有set权限

第二个命令,ACL DRYRUN user1 get name 查询用户user1能否运行 get name 命令,返回成功

第三个命令,ACL DRYRUN user1 set name 123 查询用户user1能否运行 set name 123 命令,返回失败,因为其只有对以 testset: 开头的key有set权限

第四个命令,ACL DRYRUN user1 set testset:1 123 查询用户user1能否运行set testset:1 123 命令,返回成功

你可能感兴趣的:(redis,redis的ACL,redis的ACL详解,redis之ACL持久化,redis,ACL持久化)