Zookeeper学习:Zookeeper的安全认证
Zookeeper的安全认证,在于其ACL(Access Control List)。Zookeeper提供了三种权限控制机制:权限模式、授权对象、权限;权限模式:Scheme,一般使用如下四种权限模式; IP:IP模式通过IP地址粒度来进行控制权限。当然,也支持网段分配; Digest:最常用的权限控制模式,类似于“username:password”形式的权...
·
Zookeeper的安全认证,在于其ACL(Access Control List)。Zookeeper提供了三种权限控制机制:权限模式、授权对象、权限;
权限模式:Scheme,一般使用如下四种权限模式;
IP:IP模式通过IP地址粒度来进行控制权限。当然,也支持网段分配;
Digest:最常用的权限控制模式,类似于“username:password”形式的权限标识进行权限配置。Zookeeper对形成的权限标识先后进行两次编码处理:SHA-1加密算法、Base64编码;
World:一种最开放的权限控制模式,仅仅使用一个标识;
Super:超级用户模式,在超级用户模式下可以对Zookeeper进行任意操作;
权限对象:指权限赋予的用户或一个指定的实体,在不同模式下,授权对象也是不同的。这种模式和授权对象一一对应;
权限:指通过权限检测后可以被允许执行的操作,Zookeeper对数据的操作权限分为五大类:CREATE、DELETE、READ、WRITE、ADMIN;
下面以Digest为例,跑一段代码看一下效果:
public class ZookeeperAuth2{
//连接地址
private static final String CONNECTION_ADDR = "192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181";
//测试路径
private static final String NODE_PATH = "/testAuth";
//认证类型
private static final String AUTH_TYPE = "digest";
//正确的认证
private static final String AUTH_VALUE = "20190112";
//错误的认证
private static final String AUTH_BAD_VALUE = "20180112";
public static void main(String[] args) {
try {
//一、创建节点
ZooKeeper zk=new ZooKeeper(CONNECTION_ADDR,5000,new Watcher() {
public void process(WatchedEvent event) {
}
});
zk.addAuthInfo(AUTH_TYPE,AUTH_VALUE.getBytes());
zk.create(NODE_PATH,"买女孩的小火柴".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
} catch (Exception e) {
System.err.println("节点创建失败,原因:" + e.getMessage());
}
try {
//二、无授权信息访问
ZooKeeper zk2=new ZooKeeper(CONNECTION_ADDR,5000,new Watcher() {
public void process(WatchedEvent event) {
}
});
System.out.println("无授权信息访问,获取数据为:" + new String(zk2.getData(NODE_PATH,false,null)));
} catch (Exception e) {
System.err.println("无授权信息访问失败,原因:" + e.getMessage());
}
try {
//三、使用错误信息访问结点
ZooKeeper zk3=new ZooKeeper(CONNECTION_ADDR,5000,new Watcher() {
public void process(WatchedEvent event) {
}
});
zk3.addAuthInfo(AUTH_TYPE,AUTH_BAD_VALUE.getBytes());
System.out.println("使用错误信息访问结点,获取数据为:" + new String(zk3.getData(NODE_PATH,false,null)));
} catch (Exception e) {
System.err.println("使用错误信息访问结点失败,原因:" + e.getMessage());
}
try {
//四、使用正确信息访问结点
ZooKeeper zk4=new ZooKeeper(CONNECTION_ADDR,5000,new Watcher() {
public void process(WatchedEvent event) {
}
});
zk4.addAuthInfo(AUTH_TYPE,AUTH_VALUE.getBytes());
System.out.println("使用正确信息访问结点,获取数据为:" + new String(zk4.getData(NODE_PATH,false,null)));
} catch (Exception e) {
System.err.println("使用正确信息访问结点失败,原因:" + e.getMessage());
}
}
}
运行效果如图:
更多推荐
已为社区贡献2条内容
所有评论(0)