ZooKeeper通过Auth和ACL完成节点的权限控制。
2014-08-11 20:45
274 查看
Auth表示某种认证,由于一个ZooKeeper集群可能被多个项目使用,各个项目属于不同的项目组,他们在进行开发时肯定不想其他项目访问与自己相关的节点,这时可以通过为每个项目组分配一个Auth,然后每个项目组先通过Auth认证以后再继续相关的操作,这样甲Auth认证的用户就不能操作其他Auth认证后创建的节点,从而实现各个项目之间的隔离。ZooKeeper提供了如下方法完成认证,如下所示:
Void addAuthInfo(String scheme, byte[] auth) ,使用示例如下:
@Test
public void testFirstStep() {
try {
zk = new ZooKeeper(hostport, 1000000, null);
String auth_type = "digest";
String auth = "joey:some";
String p = "/acl_digest";
zk.addAuthInfo(auth_type, auth.getBytes());
zk.create(p, "hello".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
Stat stat = new Stat();
System.out.println(new String(zk.getData(p, false, stat)));
zk.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
@Test
public void testSecondStep() {
String p = "/acl_digest";
try {
zk = new ZooKeeper(hostport, 1000000, null);
String authType = "digest";
String badAuth = "joey:someBAD"; //String auth = "joey:some";
zk.addAuthInfo(authType, badAuth.getBytes());
Stat stat = new Stat();
System.out.println(new String(zk.getData(p, false, stat)));
} catch(Exception ex) {
ex.printStackTrace(); //抛出异常
} finally {
try {
zk.delete(p, -1);
zk.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
ACL用于控制Znode的访问,和Unix文件访问权限类似,提供对某类用户设置某种权限的能力(如Unix中对Owner提供读、写、执行的权限),但是在ZooKeeper中没有Owner、Group等概念,于是在ZooKeeper中使用ID表示某一类用户,可以对ID设置某种权限。(ZooKeeper对ID的数量没有限制,不像Unix文件仅支持三种类型用户)
ZK内建的ID:
ANYONE_ID_UNSAFE //任意用户
AUTH_IDS //通过Auth认证过的用户
内建的权限控制集合:
OPEN_ACL_UNSAFE: 创建任何人都可以操作的节点
READ_ACL_UNSAFE: 创建任何人都可以读的节点
CREATOR_ALL_ACL: 设置了Auth的用户可以使用该ACL集合创建节点,该节点也只能被同样Auth授权的用户操作
Void addAuthInfo(String scheme, byte[] auth) ,使用示例如下:
@Test
public void testFirstStep() {
try {
zk = new ZooKeeper(hostport, 1000000, null);
String auth_type = "digest";
String auth = "joey:some";
String p = "/acl_digest";
zk.addAuthInfo(auth_type, auth.getBytes());
zk.create(p, "hello".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);
Stat stat = new Stat();
System.out.println(new String(zk.getData(p, false, stat)));
zk.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
@Test
public void testSecondStep() {
String p = "/acl_digest";
try {
zk = new ZooKeeper(hostport, 1000000, null);
String authType = "digest";
String badAuth = "joey:someBAD"; //String auth = "joey:some";
zk.addAuthInfo(authType, badAuth.getBytes());
Stat stat = new Stat();
System.out.println(new String(zk.getData(p, false, stat)));
} catch(Exception ex) {
ex.printStackTrace(); //抛出异常
} finally {
try {
zk.delete(p, -1);
zk.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
ACL用于控制Znode的访问,和Unix文件访问权限类似,提供对某类用户设置某种权限的能力(如Unix中对Owner提供读、写、执行的权限),但是在ZooKeeper中没有Owner、Group等概念,于是在ZooKeeper中使用ID表示某一类用户,可以对ID设置某种权限。(ZooKeeper对ID的数量没有限制,不像Unix文件仅支持三种类型用户)
ZK内建的ID:
ANYONE_ID_UNSAFE //任意用户
AUTH_IDS //通过Auth认证过的用户
内建的权限控制集合:
OPEN_ACL_UNSAFE: 创建任何人都可以操作的节点
READ_ACL_UNSAFE: 创建任何人都可以读的节点
CREATOR_ALL_ACL: 设置了Auth的用户可以使用该ACL集合创建节点,该节点也只能被同样Auth授权的用户操作
相关文章推荐
- zookeeper使用ACL进行权限控制C++
- ZooKeeper3.4.6学习笔记(四)权限控制ACL
- 使用Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制
- Zookeeper的ACL权限控制
- ZooKeeper ACL权限控制
- jQuery通过控制节点实现仅在前台通过get方法完成参数传递
- Zookeeper系列(八)Zookeeper客户端(JAVA)API之节点检查和权限控制
- 【ZkClient】com.101tec的zkclient包,ACL权限控制遇到第二级目录no auth的问题
- 使用Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制
- jQuery通过控制节点实现仅在前台通过get方法完成参数传递
- Zookeeper(四)Acl权限控制
- Zookeeper客户端API之节点检查和权限控制(十一)
- Zookeeper客户端API之节点检查和权限控制(十一)
- ZooKeeper设置ACL权限控制
- linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)
- 【jQuery】控制节点,仅在前台通过get方法完成参数传递
- php中Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制 (1/4)
- Zend framework 之zend_acl,zend_auth实现用户权限控制
- ZooKeeper设置ACL权限控制
- CodeIgniter与Zend Acl结合实现轻量级权限控制