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信息,需要匹配用戶名和密碼。