1. 程式人生 > >zookeeper相關create以及ACL許可權

zookeeper相關create以及ACL許可權

客戶端

初始化zookeeper
建立zookeeper節點
api:

create(final String path, byte data[], List<ACL> acl,
            CreateMode createMode);

使用方式

String returnPath = zooKeeper.create(path, "data".getBytes(), Ids.READ_ACL_UNSAFE,
            CreateMode.PERSISTENT);

path =節點路徑
data=要存放的資料
acl = 許可權控制
CreateMode = 建立模式

acl 許可權控制

zookeeper內部封裝了Perm型別,包含5種許可權型別:
READ,WRITE ,CREATE ,DELETE,ADMIN ,以及ALL = 五合一型別

以及封裝了Id型別在Ids類中,包含2種模式:用來和Perm結合行成ACl

  ANYONE_ID_UNSAFE = new Id("world", "anyone"); //誰都可以用模式
  AUTH_IDS = new Id("auth", "");//由使用者去做具體的模式設定後,結合起來使用
  模式分別有:ip,digest,world,super 

在Ids類中,還封裝了3種複合模式,幫我們new
好了Acl的list,可以直接使用
    //公開,無需許可權模式
     public final ArrayList<ACL> OPEN_ACL_UNSAFE = new ArrayList<ACL>(
            Collections.singletonList(new ACL(Perms.ALL, ANYONE_ID_UNSAFE)));
//建立者們擁有全部的許可權,auth需要我們在new的時候自行設定對應的模式
    public final ArrayList<ACL> CREATOR_ALL_ACL = new ArrayList<ACL>(
            Collections.singletonList(new ACL(Perms.ALL, AUTH_IDS)));
  //只讀模式
    public final ArrayList<ACL> READ_ACL_UNSAFE = new ArrayList<ACL>(
            Collections
                    .singletonList(new ACL(Perms.READ, ANYONE_ID_UNSAFE)));

模式 具體參考從Paxos到Zookeeper書的p266左右*頁左右

ip:增對ip粒度來進行許可權控制,也可以通過ip段來控制,比如“ip:192.168.0.1/24” 表示192.168.0.*這個ip段

digest: zooKeeper.addAuthInfo(“digest”,”username:password”.getBytes()); //使用者名稱密碼模式
如果是在命令列直接使用,通過DigestAuthenticationProvider.generateDigest(idPassword)
方法, 獲得對應的加密後Base64(SHA-1(Username:password))的password
然後在命令列輸入 getAcl /path ‘digest’,’username:生成的password’

world:對所有使用者開放許可權,只有一個許可權標識“world:anyone”

super:超級使用者,可以對任意zookeeper上的資料節點進行任何操作

自定義許可權模式:通過AuthenticationProvider類實現,不展開

CreateMode 建立模式

持久化的:客戶端斷開不會消失,永久存在的
臨時的:客戶端斷開後節點消失
覆蓋的:建立的時候返回的path等於輸入的path
順序遞增的:建立的時候返回的path等於輸入的path後加上一個遞增的數字

建立模式共4種
PERSISTENT //持久節點
PERSISTENT_SEQUENTIAL //持久節點並且順序遞增的
EPHEMERAL //臨時節點
EPHEMERAL_SEQUENTIAL //臨時節點,並且順序遞增的

新增許可權

對已經存在的節點新增許可權,通過方法

public Stat setACL(final String path, List<ACL> acl, int version)
public void setACL(final String path, List<ACL> acl, int version,
            StatCallback cb, Object ctx)

給客戶端設定許可權,用來通過許可權校驗

    zooKeeper.addAuthInfo("digest","username:password".getBytes());