(七)、ZooKeeper 授權驗證
阿新 • • 發佈:2019-01-29
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型別。
設定之後,對應操作Zookeeper資訊,需要匹配使用者名稱和密碼。<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(); } }