(七)、ZooKeeper 授權驗證

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 )
注意的是, exists 操作和 getAcl 操作並不受 ACL 許可控制,因此任何客戶端可以查詢節點的狀態和節點的 ACL 。 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章