权限管理ACL(Access Control List)
Zookeeper的权限
CREATE: 能创建子节点
READ:能获取节点数据和列出其子节点
WRITE: 能设置节点数据
DELETE: 能删除子节点
ADMIN: 能设置权限
zookeeper的认证方式
world:默认方式,相当于全世界都能访问
auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
ip:使用Ip地址认证
JAVA Client
原生API
Curator
ZkClient
ACL认证案例-原生API
String testNode = "/test";
String zookeeperAddress = "10.21.51.243:2181,10.21.49.252:2181,10.21.50.241:2181";
System.out.println(zookeeperAddress);
/**
* 建立连接
*/
ZooKeeper zk = new ZooKeeper(zookeeperAddress, 3000, new Watcher() {
// 监控所有被触发的事件
@Override
public void process(WatchedEvent event) {
System.out.println(event.toString());
}
});
System.out.println("OK!");
/**
* schema
* 设置认证
*
* world 只有一个用户:anyone,代表所有人(默认)
* ip 使用IP地址认证
* auth 使用已添加认证的用户认证
* digest 使用“用户名:密码”方式认证
*/
zk.addAuthInfo("digest", "admin:admin".getBytes());
zk.addAuthInfo("digest", "abc:abc".getBytes());
/**
* 判断节点是否存在
*/
if (zk.exists(testNode, true) == null) {
/**
*设置认证方式
*/
Id ADMIN_IDS = new Id("digest", DigestAuthenticationProvider.generateDigest("admin:admin"));
Id USER_IDS = new Id("digest", DigestAuthenticationProvider.generateDigest("abc:abc"));
Id ANYONE_ID_UNSAFE = ZooDefs.Ids.ANYONE_ID_UNSAFE;
/**
*设置ACL权限
*Create 允许对子节点Create 操作
*Read 允许对本节点GetChildren 和GetData 操作
*Write 允许对本节点SetData 操作
*Delete 允许对子节点Delete 操作(本节点也可以删除)
*Admin 允许对本节点setAcl 操作
*ALL = READ | WRITE | CREATE | DELETE | ADMIN;
*/
List<ACL> aclList = new ArrayList<>();
aclList.add(new ACL(ZooDefs.Perms.ADMIN, ADMIN_IDS));
aclList.add(new ACL(ZooDefs.Perms.CREATE | ZooDefs.Perms.READ | ZooDefs.Perms.WRITE | ZooDefs.Perms.DELETE, USER_IDS));
aclList.add(new ACL(ZooDefs.Perms.READ, ANYONE_ID_UNSAFE));
/**
* 创建根节点
*/
zk.create(testNode, "0".getBytes(), aclList, CreateMode.PERSISTENT);
}
/**
* 查看ACL权限
*/
if (zk.exists(testNode, true) != null) {
List<ACL> craneAcl = zk.getACL(testNode, new Stat());
System.out.println(craneAcl);
}
System.out.println("所有的节点");
System.out.println(zk.getChildren("/", false));
参考
https://www.cnblogs.com/yjmyzz/p/zookeeper-acl-demo.html
https://blog.youkuaiyun.com/liuxiao723846/article/details/79391650