ZooKeeper完全解析(十一) 權限管理與Curator增加權限驗證

  在ZooKeeper中,可以爲節點設置權限,這樣只有用戶對應權限的客戶端才能訪問到指定的節點。

  ZooKeeper中的權限認證可以分爲 scheme、id、permission。其中scheme爲驗證的種類,id爲對應類型中的登錄id,permission爲登錄id的權限。

一、scheme:
 其中scheme分爲四種:
  world:默認方式,即所有人都可以訪問。
  auth:使用id來進行驗證,可以認爲是直接傳入 userName:passWord 來進行驗證
  digest:也是使用用戶名:密碼的形式進行驗證,不過要對passWord進行MD5哈希,然後再進行bese64。
  ip:使用ip地址進行驗證。

 下面重點講一下world與digest:
 1、world:
  我們默認創建節點的時候使用 world,即 world:anyone:cdrwa ,使用的時候,可以:
     setAcl / world:anyone:cdrwa
  此爲創建 / 節點的驗證爲所有人都可以增刪改查。

 2、digest:
  即賬號密碼驗證,比如賬號密碼爲 heng 123456 ,那麼驗證之後的爲 BASE64(SHA1(xxx) ,即 BASE64(SHA1(heng+123456),可以使用zooKeeper中的工具來獲取:
java -Djava.ext.dirs=/Users/happyheng/Java/zookeeper-3.4.13/lib -cp /Users/happyheng/Java/zookeeper-3.4.13/zookeeper-3.4.13.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider heng:123456
  即返回 heng:123456->heng:2uqILaYfnmo+aZZ4eZ3Bmr1mJq0= 
  所以,可以使用 heng:2uqILaYfnmo+aZZ4eZ3Bmr1mJq0= 

  所以,添加權限的時候可以用:
    create "/digest" "" digest:heng:2uqILaYfnmo+aZZ4eZ3Bmr1mJq0=:cdrwa
  這時候再訪問 /digest 就返回權限不足,這時候通過 addauth 來添加權限:
    addauth digest heng:123456
  然後就可以訪問 /digest 了


二、id:
  id與scheme相關聯,當scheme爲world的時候,id爲anyone,爲digest的時候,爲 賬號:密碼


三、permission:
  permission即節點的訪問權限:
  cdrwa分別爲:
  1、創建子節點的權限
  2、刪除節點的權限
  3、讀取節點數據的權限
  4、修改節點數據的權限
  5、設置子節點權限的權限
  即
  Create 允許對子節點 Create 操作
  Read 允許對本節點 GetChildren 和 GetData 操作
  Write 允許對本節點 SetData 操作
  Delete 允許對子節點 Delete 操作
  Admin 允許對本節點 setAcl 操作 
 

四、Curator增加權限驗證:   

   以上述 addauth digest heng:123456 爲例,在curator初始化時,可以這樣使用:

    framework = CuratorFrameworkFactory.builder()
                        . . .
                        .authorization("digist", "heng:123456".getBytes())
                        . . .
                        .build();
    framework.start();

 

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