ZK的节点有5种操作权限:
CREATE、READ、WRITE、DELETE、ADMIN 也就是增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)
注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限
身份的认证有4种方式:
world:默认方式,相当于全世界都能访问
auth:代表已经认证通过的用户(cli中可以通过addauth digestuser:pwd 来添加当前上下文中的授权用户)
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
ip:使用Ip地址认证
设置访问控制:
方式一:(推荐)
1)增加一个认证用户
addauth digest 用户名:密码明文
eg. addauth digest user1:password1
2)设置权限
setAcl /path auth:用户名:密码明文:权限
eg. setAcl /test auth:user1:password1:cdrwa
3)查看Acl设置
getAcl /path
方式二:
setAcl /path digest:用户名:密码密文:权限
注:这里的加密规则是SHA1加密,然后base64编码。
~~~~~~~~~~~~~~~~~~~~~~~~~~~
一、ip scheme
设置可以访问的ip地址(比如127.0.0.1)或ip地址段(比如192.168.1.0/16)
10.194.157.58这台机器上创建/test并设置ip访问权限
[zk:10.194.157.58:2181(CONNECTED) 0] create /test "123"
Created /test
[zk:10.194.157.58:2181(CONNECTED) 1] setAcl /test ip:10.194.157.58:crwda
cZxid =0x740021e467
ctime = Wed Dec02 18:09:09 CST 2015
mZxid =0x740021e467
mtime = Wed Dec02 18:09:09 CST 2015
pZxid =0x740021e467
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner =0x0
dataLength = 5
numChildren = 0
[zk:10.194.157.58:2181(CONNECTED) 2] ls /test
[]
可以看到,本机是可以访问的。
在10.205.148.152上登陆
[zk:10.194.157.58:2181(CONNECTED) 1] ls /test
Authenticationis not valid : /test
可以看到,连接的ip不在授权中,提示访问错误。
二、设置用户和密码
[zk: localhost:2181(CONNECTED) 4] create /test '12345678'
Created /test
[zk: localhost:2181(CONNECTED) 5] addauth digest user1:123456
[zk: localhost:2181(CONNECTED) 6] setAcl /test auth:user1:123456:r
cZxid = 0x200000003
ctime = Mon Sep 25 18:59:03 CST 2017
mZxid = 0x200000003
mtime = Mon Sep 25 18:59:03 CST 2017
pZxid = 0x200000003
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
[zk: localhost:2181(CONNECTED) 7] getAcl /test
'digest,'user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=
: r
[zk: localhost:2181(CONNECTED) 8]