ZooKeeper ACL之Super模式

根據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

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