默认权限:
[permissonins]
c:create
(不设置就不能创建该节点的子节点)
r:read
(不设置就不能获取该节点信息,但如果子节点设置了r
还是能获取子节点信息)
w:write
(不设置就不能修改该节点信息,但如果子节点设置了w
还是能修改子节点信息)
d:delete
(不设置就不能删除该节点,也不能删除子节点)
world
auth
- 使用auth时,需要首先进行账号密码注册,否则无效;
addauth digest 账号:密码
可以看到使用digest注册,保存在数据库的密码是以密文的形式,它经过了SHA1加密后又用了BASE64加密,双重加密
'digest,'zsl:Fx+cuv7M7sbNyRbSyGvEoGnllEM=
- 注册完后就可以,在节点上针对该账号密码进行权限设置
setAcl 路径 auth:账号:密码:[permissions]
- 通过匿名方式设置权限;其实此时因为你前面已经通过了账号密码进行权限设置,所以你再次设置,默认取当前第一个账号,可以不用输入账号密码,因为它会根据你第一次注册的用户进行绑定 ;
setAcl 路径 auth::[permissions]
- 你再使用addauth注册一个账号
addauth digest 账号:密码
'digest,'zslx:mSx7c6F9PLe+xTpf/7EY9yx/wow=
- 再针对该账号对该节点设置权限,你会发现这个节点可以针对不同的账号进行权限控制
- 使用匿名的方式还是可以进行设置权限,不过默认是第一个账号
setAcl 路径 auth::[permissions]
- 我们给节点设置了针对账号的权限,我们断开连接,连上后,不登录账号密码,会发现没有对该节点的权限;
- 断开客户端连接后,需要再次登录账号密码,才能对设置了账号权限的节点进行操作;
addauth digest 账号:明文密码
登录- 我们登录都是通过密码是明文的方式登录
digest
- 通过digest,密码密文的方式给节点设置账号权限
setAcl 路径 digest:账号:密文密码:[permissions]
ip
设置只有指定ip才能访问该节点
setAcl 路径 ip:ip地址:[permissions]
super
- 当忘记了密码,需要使用超级管理的权限去重新设置节点权限,这时候就可以使用super,权限等级最高;
- 修改 zkServer.sh文件,在nohup下
"-Dzookeeper.DigestAuthenticationProvider.superDigest=账号:密文密码="
- 对应着zookeeper源代码里,
DigestAuthenticationProvider
类下的静态常量属性superDigest