ZK的节点有5种操作权限:

CREATEREADWRITEDELETEADMIN 也就是增、删、改、查、管理权限,这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]