文章

设置用户及权限类

https://www.cnblogs.com/zhoujinyi/p/13222464.html

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

1
2
3
4
在创建用户之前,先说明下ACL的规则,首先看下一个完整的用户权限的格式:

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

格式说明:

| 参 数 | 说明 | |:——-:|:——————————————————————-:| | user | 用户 | | default | 表示默认用户名,或则自己定义的用户名 | | on | 表示是否启用该用户,默认为off(禁用) | | #… | 表示用户密码,nopass表示不需要密码 | | ~* | 表示可以访问的Key(正则匹配) | | +@ | 表示用户的权限,+/-表示授权还是销权; @为权限类。+@all 表示所有权限 |

密码相关

① 配置密码:一个用户可以设置不同的密码,即一个用户可以有多个密码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
-- 添加密码 
## >开头: >password,明文密码;
> ACL SETUSER zhoujy on >abc
OK

# 获取哈希值密码 echo -n "cba" | shasum -a 256
6d970874d0db767a7058798973f22cf6589601edab57996312f2ef7b56e5584d

## #开头: #hash,SHA-256哈希值
> ACL SETUSER zhoujy on #6d970874d0db767a7058798973f22cf6589601edab57996312f2ef7b56e5584d
OK

## 查看
> ACL GETUSER zhoujy
1) "flags"
2) 1) "on"
3) "passwords"
4) 1) "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
   2) "6d970874d0db767a7058798973f22cf6589601edab57996312f2ef7b56e5584d"
5) "commands"
6) "-@all"
7) "keys"
8) (empty array)

## 认证密码
> AUTH zhoujy abc
OK
> AUTH zhoujy cba
OK


-- 移除密码
## <开头: <password ,明文密码
> ACL SETUSER zhoujy <abc
OK

## 用!开头: !hash,SHA-256哈希值
> ACL SETUSER zhoujy on !6d970874d0db767a7058798973f22cf6589601edab57996312f2ef7b56e5584d
OK

## 查看
> ACL GETUSER zhoujy
1) "flags"
2) 1) "on"
3) "passwords"
4) (empty array)
5) "commands"
6) "-@all"
7) "keys"
8) (empty array)

## 认证密码
> AUTH zhoujy abc
(error) WRONGPASS invalid username-password pair

② 清理/删除密码:通过nopass清理用户的密码,但是该用户连接还是需要AUTH,只是密码可以是任意值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
-- 清理/删除密码,可以用任意密码登陆
## 查看
> ACL GETUSER zhoujy
1) "flags"
2) 1) "on"
   2) "allkeys"
   3) "allcommands"
3) "passwords"
4) 1) "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
   2) "6d970874d0db767a7058798973f22cf6589601edab57996312f2ef7b56e5584d"
5) "commands"
6) "+@all"
7) "keys"
8) 1) "*"

## 删除、清理用户密码
> ACL SETUSER zhoujy nopass
OK

## 查看
> ACL GETUSER zhoujy
1) "flags"
2) 1) "on"
   2) "allkeys"
   3) "allcommands"
   4) "nopass"
3) "passwords"
4) (empty array)
5) "commands"
6) "+@all"
7) "keys"
8) 1) "*"

## 验证
> AUTH zhoujy  --需要AUTH
(error) WRONGPASS invalid username-password pair

> AUTH zhoujy ''  --可以输入任何密码
OK


-- 清理/删除密码,不能登陆,需要设置密码后才能登陆
## 查看
> ACL GETUSER zhoujy
1) "flags"
2) 1) "on"
   2) "allkeys"
   3) "allcommands"
3) "passwords"
4) 1) "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
   2) "6d970874d0db767a7058798973f22cf6589601edab57996312f2ef7b56e5584d"
5) "commands"
6) "+@all"
7) "keys"
8) 1) "*"

## 删除、清理用户密码
> ACL SETUSER zhoujy resetpass
OK
> ACL GETUSER zhoujy
1) "flags"
2) 1) "on"
   2) "allkeys"
   3) "allcommands"
3) "passwords"
4) (empty array)
5) "commands"
6) "+@all"
7) "keys"
8) 1) "*"

## 验证,被resetpass重置密码之后,不能登陆,只能设置密码或则设置nopass才能登陆
> AUTH zhoujy
(error) WRONGPASS invalid username-password pair

> AUTH zhoujy ''
(error) WRONGPASS invalid username-password pair

③ 重置用户和密码:实际上是执行 resetpass,resetkeys,off,-@all

1
2
3
4
5
6
7
8
9
10
11
12
13
## 查看
> ACL LIST
1) "user default on #ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ~* +@all"
2) "user zhoujy on #ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ~* +@all"

## 重置用户
> ACL SETUSER zhoujy reset
OK

## 查看
> ACL LIST
1) "user default on #ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ~* +@all"
2) "user zhoujy off -@all"

④ 获取随机密码:

1
2
3
-- 生成随机密码
> ACL GENPASS
"7a3288b05577cb6fea9b1a9a8bcfe10d9589e64be74e8a0e16c131ba896c7bde"

键模式:~<pattern>,通配符模式

比如: ~表示允许访问所有key,也可以用 allkeys来表示~

resetkeys 表示清空它之前所有的键模式,之后的键模式不影响。 ``` – 可以操作foo开头和bar:开头的所有key ACL SETUSER zhoujy on >abc ~foo* ~bar:*+@all OK

查看

ACL LIST 1) “user default on #ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ~* +@all” 2) “user zhoujy on #ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ~foo* ~bar:*+@all”

– 只能操作ob:开头的key,前面的key模式被resetkeys清空了

ACL SETUSER zhoujy on >abc ~foo* ~bar:* resetkeys ~ob:*+@all OK

查看

ACL LIST 1) “user default on #ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ~* +@all” 2) “user zhoujy on #ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ~ob:*+@all”

– 操作所有key,allkeys 和 ~* 一样

ACL SETUSER zhoujy allkeys +@all OK ACL LIST 1) “user default on #ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ~* +@all”

查看

2) “user zhoujy on #ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ~*+@all”

1
2
3
4
5
6
7
8
9

## 权限相关

> 权限这块涉及到的比较多:
> 
> > 权限的类别、类别里包含的命令,以及子权限。
>
>注意:-@all表示没有任何权限;+@all表示有所有权限;

– 返回权限的类别

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”

– 返回指定类别中的命令,下面hash是上面返回的一个结果

ACL CAT hash 1) “hsetnx” 2) “hset” 3) “hlen” 4) “hmget” 5) “hincrbyfloat” 6) “hgetall” 7) “hvals” 8) “hscan” 9) “hkeys” 10) “hstrlen” 11) “hget” 12) “hdel” 13) “hexists” 14) “hincrby” 15) “hmset” ```

场景说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
创建DBA管理账号
> ACL SETUSER dba on #6d0ac515af9df81653ed0aa3ffa692663c3f556079791e2f00a4578990da66f3 allkeys +@all
OK

创建读写账号
> ACL SETUSER readwrite on >abc allkeys -@all +@read +@write
OK

创建只读账号
> ACL SETUSER readonly on >abc allkeys -@all +@read
OK

创建只写账号
> ACL SETUSER write_user on >abc allkeys -@all +@write
OK

创建复制账号
> ACL SETUSER replica-user >abc -@all +psync +replconf +ping on
OK

创建哨兵账号
> ACL SETUSER sentinel-user >abc -@all +client +subscribe +publish +ping +info +multi +slaveof +config +client +exec on
OK

创建监控账号
> ACL SETUSER monitor on >abc +monitor
OK

创建指定key、有指定类型权限的账号
-- 指定对h开头的hash类型的key有权限
> ACL SETUSER ops_user on >abc ~h* +@hash
OK
其中key的模式是正则匹配,需要~开头,针对权限则是hash的类,其权限可以通过ACL CAT hash查看。

注意:以上操作完只有需要执行ACL SAVE。不然重置之后用户信息全部都清空了。

本文由作者按照 CC BY 4.0 进行授权