美文网首页
zookeeper的ACL(访问控制)

zookeeper的ACL(访问控制)

作者: Audience0 | 来源:发表于2019-10-08 21:13 被阅读0次

ACL(Access Control List),Zookeeper 作为一个分布式协调框架,其内部存储的都是一些关于分布式系统运行时状态的元数据,默认情况下,所有应用都可以读取任何节点,在复杂的应用中,不太安全,ZK通过ACL机制来解决访问权限问题。

image.png

scheme:world表示全世界
id:anyone表示所有人
Permissions:read,write,create,detele,admin

以上表示显示任何人都可以对他增删改查管理.


控制方式
1.IP方式:
通过IP地址粒度进行权限控制模式
2.digest:
digest是最常用的权限控制模式,采用username:password形式进行权限管理,ZK会对形成的权限标识先后进行两次加密处理,分别是SHA-1加密算法和Base64编码
3.world:
world是一种最开放的控制模式,任何人都可以访问
4:auth:
不适用任何id,代表任何已认证的用户


zookeeper节点操作权限分为五种:
read,write,create,detele,admin
读,写,创建,删除,管理


查看ACL


image.png

增加认证用户或者说是登陆


image.png

添加权限


image.png
/**
 * 为zookeeper增加权限
 * 具有创建权限的可以创建子节点,创建时可以指定权限,如不指定则是anyone
 * 不具有创建权限的不可以创建子节点,但是可以创建非该节点 子节点的其他节点
 * 
 * 创建用户ID的时候 注意加密
 */
public class CuratorAcl {

    private CuratorFramework client;
    private static final String ACL_Path = "/acl1";
    private static final String ZK_ADRESS = "127.0.0.1";
    public CuratorAcl() {
        //client = CuratorFrameworkFactory.newClient(ZK_ADRESS,new RetryNTimes(3,10));
        client = CuratorFrameworkFactory.builder()
                //.authorization("digest","zhangsan:123".getBytes())
                //.authorization("digest","wangwu:123".getBytes())
                .authorization("digest","lisi:123".getBytes())
                .connectString(ZK_ADRESS)
                .retryPolicy(new RetryNTimes(3,200))
                .sessionTimeoutMs(100)
                .connectionTimeoutMs(1000000)
                .build();
        client.start();
    }

    public static void main(String[] args) throws Exception {
        CuratorAcl curatorAcl = new CuratorAcl();
        if (CuratorFrameworkState.STARTED.name().equals(curatorAcl.client.getState().name())){
            System.out.println("curator 连接成功");
            /*List<ACL> aclList = new ArrayList<>();
            Id zhangsan = new Id("digest", DigestAuthenticationProvider.generateDigest("zhangsan:123"));
            Id lisi = new Id("digest", DigestAuthenticationProvider.generateDigest("lisi:123"));
            aclList.add(new ACL(ZooDefs.Perms.ALL,zhangsan));
            aclList.add(new ACL(ZooDefs.Perms.READ,lisi));*/

            //创建节点
          /*  curatorAcl.client.create().creatingParentsIfNeeded()
                    .withMode(CreateMode.PERSISTENT)//指定节点类型
                    .withACL(aclList)//指定权限
                    .forPath(ACL_Path,"acl".getBytes());*/
            //修改数据
            //curatorAcl.client.setData().withVersion(-1).forPath(ACL_Path,"acl6".getBytes());
            //System.out.println(new String(curatorAcl.client.getData().forPath(ACL_Path)));
            /*List<ACL> acls = curatorAcl.client.getACL().forPath(ACL_Path);
            acls.add(new ACL(ZooDefs.Perms.READ | ZooDefs.Perms.CREATE |ZooDefs.Perms.WRITE,new Id("digest",DigestAuthenticationProvider.generateDigest("wangwu:123"))));
            curatorAcl.client.setACL()
                    .withACL(acls)
                    .forPath(ACL_Path);*/
            Stat stat = new Stat();
            System.out.println(new String(curatorAcl.client.getData().storingStatIn(stat).forPath(ACL_Path+"/acl")));
            curatorAcl.client.setData().withVersion(stat.getVersion()).forPath(ACL_Path+"/acl","s1f".getBytes());
            List<ACL> acls = curatorAcl.client.getACL().forPath(ACL_Path + "/acl");
            System.out.println(new String(curatorAcl.client.getData().storingStatIn(stat).forPath(ACL_Path+"/acl")));

            /*curatorAcl.client.create().creatingParentsIfNeeded()
                    .withMode(CreateMode.PERSISTENT)//指定节点类型
                   // .withACL(aclList)//指定权限
                    .forPath(ACL_Path + "/acl1","acl".getBytes());*/
        }
    }
}

相关文章

  • zookeeper的ACL[转]

    1、Zk的访问控制 Zookeeper使用ACL来控制访问Znode,ACL的实现和UNIX的实现非常相似:它采用...

  • zookeeper的ACL(访问控制)

    ACL(Access Control List),Zookeeper 作为一个分布式协调框架,其内部存储的都是一些...

  • 6. ZooKeeper访问控制列表

    ZooKeeper的数据模型提供了ACL机制来控制访问znode。 在创建znode时,ACL将确定你可以在zno...

  • Zookeeper权限控制ACl

    本文摘抄至-说说Zookeeper中的ACL zookeeper中,node的ACL是没有继承关系的,是独立控制的...

  • RocketMQ ACL 使用指南

    一 、什么是 ACL? ACL 是 access control list 的简称,俗称访问控制列表。访问控制,基...

  • 华为acl

    acl access control list 访问控制列表 acl 基本acl 2000-29...

  • MQTT MOSCA ACL

    MQTT ACL 1、ACL 访问控制列表a、用户控制b、发布控制c、订阅控制 客户端代码 自定义访问控制列表 ...

  • RocketMQ ACL使用指南

    1、什么是ACL? ACL是access control list的简称,俗称访问控制列表。访问控制,基本上会涉及...

  • ACL介绍

    ACL:访问控制列表(centos 7默认打开)顺序:owner > acl user > group acl ...

  • (翻译)fabric1.2.1新特性-访问控制列表

    访问控制列表 Access Control Lists(ACL) 什么是访问控制列表? fabric 使用访问控制...

网友评论

      本文标题:zookeeper的ACL(访问控制)

      本文链接:https://www.haomeiwen.com/subject/godxyctx.html