1.Zookeeper权限介绍
ZooKeeper 的权限管理亦即 ACL 控制功能通过 Server 、 Client 两端协调完成:
Server 端:一个 ZooKeeper 的节点( znode )存储两部分内容:数据和状态,状态中包含 ACL 信息。创建一个 znode 会产生一个 ACL 列表,列表中每个 ACL 包括:
- 验证模式 (scheme)
- 具体内容 (Id) (当 scheme=“digest” 时,Id 为用户名密码,例如 “root :J0sTy9BCUKubtK1y8pkbL7qoxSw=” )
- 权限 (perms)
1.1 scheme
- ZooKeeper 提供了如下几种验证模式( scheme ):
- digest : Client 端由用户名和密码验证,譬如 user:password , digest 的密码生成方式是 Sha1 摘要的 base64 形式
- auth : 不使用任何 id ,代表任何已确认用户。
- ip : Client 端由 IP 地址验证,譬如 172.2.0.0/24
- world :固定用户为 anyone ,为所有 Client 端开放权限
- super :在这种 scheme 情况下,对应的 id 拥有超级权限,可以做任何事情 (cdrwa )
1.2 perms
节点的权限( perms )主要有以下几种:- Create 允许对子节点 Create 操作
- Read 允许对本节点 GetChildren 和 GetData 操作
- Write 允许对本节点 SetData 操作
- Delete 允许对子节点 Delete 操作
- Admin 允许对本节点 setAcl 操作
2.Java代码
2.1、创建时指定用户和密码、schema类型。
<span style="white-space:pre"> </span>private String auth = "";
private List<ACL> acls = null;
public ZKOperate(String userName,String password){
try {
auth = userName + ":" +password;
Id id = new Id("digest",DigestAuthenticationProvider.generateDigest(auth));
ACL acl = new ACL(ZooDefs.Perms.ALL, id);
acls = Collections.singletonList(acl);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
设置之后,对应操作Zookeeper信息,需要匹配用户名和密码。