15.4.4 ZooKeeper ACL

ZooKeeper使用ACL来对Znode进行访问控制。ACL的实现和UNIX文件访问许可非常相似:它使用许可位来对一个节点的不同操作进行允许或禁止的权限控制。但是,和标准的UNIX许可不同的是,ZooKeeper节点有user(文件的拥有者)、group和world三种标准模式,并且没有节点所有者的概念。

需要注意的是,一个ACL和一个ZooKeeper节点相对应。并且,父节点的ACL与子节点的ACL是相互独立的。也就是说,ACL不能被子节点所继承,父节点所拥有的权限与子节点所拥有的权限没有任何关系。

表15-5为访问控制列表所规定的权限。

15.4.4 ZooKeeper ACL - 图1

ZooKeeper ACL的使用依赖于验证,它支持如下几种验证模式:

world:代表某一特定的用户(客户端)。

auth:代表任何已经通过验证的用户(客户端)。

digest:通过用户名密码进行验证。

ip:通过客户端IP地址进行验证。

当会话建立的时候,客户端将会进行自我验证。

另外,ZooKeeper Java API支持三种标准用户权限,它们分别为:


ZOO_OPEN_ACL_UNSAFE;

ZOO_READ_ACL_UNSAFE;

ZOO_CREATOR_ALL_ACL;


ZOO_OPEN_ACL_UNSAFE对于所有的ACL来说都是完全开放的:任何应用程序可以在节点上执行任何操作,比如创建、列出并删除子节点。ZOO_READ_ACL_UNSAFE对于任意的应用程序来说,仅仅具有读权限。ZOO_CREATOR_ALL_ACL授予节点创建者所有的权限。需要注意的是,在设置此权限之前,创建者必须已经通过了服务器的认证。