Appearance
针对节点可以设置相关读写等权限,目的为了保障数据安全性;权限permissions可以指定不同的权限范围以及角色。
- getAcl:获取某个节点的acl权限信息
- setAcl:设置某个节点的ac|权限信息
setAcl <path> world:anyone:crwd
:表示任何人都有创建、读取、写入、删除该节点的权限
- addauth:输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是以加密的形式存在的
权限的构成
zk的ACL通过[scheme:id:permissions]
来构成权限列表
scheme:代表采用的某种权限机制
- world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是
world:anyone:[permissions]
- auth:代表认证登录,需要注册用户有权限就可以,形式为
auth:user:password:[permissions]
- digest:需要对密码加密才能访问,组合形式为
digest: username:BASE64(SHA1(password)):[permissions]
- ip:限制制定ip才可访问,比如
ip:192.168.1.1:[permissions]
- world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是
id:代表允许访问的用户
permissions:权限组合字符串,权限字符串缩写crdwa
- create:创建子节点
- read:获取当前节点/子节点
- write:设置节点数据
- delete:删除子节点
- admin:设置当前节点的权限
实战演练
1.scheme之world功能演示
shell
[zk: localhost:2181(CONNECTED) 18] create /xk857/abc abc # 创建/xk857/abc节点,并设置值为abc
Created /xk857/abc
[zk: localhost:2181(CONNECTED) 19] getAcl /xk857/abc # 查看/xk857/abc节点的权限
'world,'anyone # 所有人
: cdrwa #可进行增删改查及设置权限
[zk: localhost:2181(CONNECTED) 20] setAcl /xk857/abc world:anyone:crwa # 设置该节点下的子节点不可删除
cZxid = 0x3 # ……输出的数据不重要这里省略
[zk: localhost:2181(CONNECTED) 21] getAcl /xk857/abc # 获取该节点,检查权限发现d没有了
'world,'anyone
: crwa
[zk: localhost:2181(CONNECTED) 22] creat /xk857/abc/bcd bcd #在 /xk857/abc 节点下创建子节点
ZooKeeper -server host:port cmd args # ……
[zk: localhost:2181(CONNECTED) 23] delete /xk857/abc/bcd # 尝试删除子节点
Node does not exist: /xk857/abc/bcd # 提示没有权限
2.scheme之auth功能演示
shell
[zk: localhost:2181(CONNECTED) 25] addauth digest xk857:xk857 #创建用户,账号密码都是xk857
[zk: localhost:2181(CONNECTED) 26] setAcl /xk857/abc auth:xk857:xk857:cdrwa # 设置节点 /xk857/abc 对xk857账号开放所有权限
cZxid = 0x3 # ……
[zk: localhost:2181(CONNECTED) 27] getAcl /xk857/abc #获取节点权限数据
'digest,'xk857:+3c13f0N7Xwl04rR6Bnc+HcJuLQ= # 密码是加密存储的,不明文显示
: cdrwa
3.scheme之digest功能演示
auth和digest命令功能类似,只不过使用digest命令输入密码是密文。
shell
[zk: localhost:2181(CONNECTED) 33] setAcl /xk857/abc digest:xk857:+3c13f0N7Xwl04rR6Bnc+HcJuLQ=:cdra # 密码使用加密方式
[zk: localhost:2181(CONNECTED) 34] addauth digest xk857:xk857 #但是登录时仍使用明文,addauth第一次是创建用户,后续则是登录
TIP
执行 addauth digest username:password
命令后,当客户端连接到Zookeeper服务器时,会将用户名和密码用MD5哈希算法加密后发送给服务器进行身份验证。如果身份验证成功,则客户端可以访问受保护的znode节点。
4.id设置
shell
[zk: localhost:2181(CONNECTED) 0] create /xk857/ip ipadd
Created /xk857/ip
[zk: localhost:2181(CONNECTED) 2] setAcl /xk857/ip ip:192.168.31.11:cdrwa