根據ACL權限控制的原理,一旦對一個數據節點設置了權限,那麼其他沒有被授權的ZooKeeper客戶端將無法訪問該節點。那麼,如果一個節點包含了ACL權限控制,而其創建者客戶端已經退出或者已經不再使用,此時可以使用超級管理員權限來進行處理。
配置步驟如下:
- 生成權限Id
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
import java.security.NoSuchAlgorithmException;
public class DigestAuthenticationProviderUsage {
public static void main(String[] args) throws NoSuchAlgorithmException {
// ZooKeeper會對明文Id先後進行兩次編碼,分別是SHA-1算法加密和BASE64編碼
System.out.println(DigestAuthenticationProvider.generateDigest("zookeeper:admin"));
}
}
- 在ZooKeeper服務器上開啓模式,有兩種方式:
若是命令行啓動,則在命令添加-Dzookeeper.DigestAuthenticationProvider.superDigest=zookeeper:qW/HnTfCSoQpB5G8LgkwT3IbiFc=
;
若是zkServer.sh腳本啓動,則在nohup行添加上面的參數、
- 獲取Super權限
若是Java客戶端,可通過以下代碼獲取:
ZooKeeper zooKeeper = new ZooKeeper("localhost:2181", 50000, null);
zooKeeper.addAuthInfo("digest", "zookeeper:admin".getBytes());
若是zkCli.sh,登錄後執行addauth digest zookeeper:admin
。
需要注意的是,客戶端和命令行設置權限時用的是明文Id。