您的位置:首页 > 其它

(七)、ZooKeeper 授权验证

2016-08-20 23:47 211 查看

1.Zookeeper权限介绍

ZooKeeper 的权限管理亦即 ACL 控制功能通过 Server 、 Client 两端协调完成:

Server 端:

一个 ZooKeeper 的节点( znode )存储两部分内容:数据和状态,状态中包含 ACL 信息。创建一个 znode 会产生一个 ACL 列表,列表中每个 ACL 包括:

验证模式 (scheme)
具体内容 (Id) (当 scheme=“digest” 时,Id 为用户名密码,例如 “root :J0sTy9BCUKubtK1y8pkbL7qoxSw=” )
权限 (perms)

1.1 scheme

ZooKeeper 提供了如下几种验证模式( scheme ):
digest : Client 端由用户名和密码验证,譬如 user:password , digest 的密码生成方式是 Sha1 摘要的 base64 形式
auth : 不使用任何 id ,代表任何已确认用户。
ip : Client 端由 IP 地址验证,譬如 172.2.0.0/24
world :固定用户为 anyone ,为所有 Client 端开放权限
super :在这种 scheme 情况下,对应的 id 拥有超级权限,可以做任何事情 (cdrwa )

注意的是, exists 操作和 getAcl 操作并不受 ACL 许可控制,因此任何客户端可以查询节点的状态和节点的 ACL 。

1.2 perms

节点的权限( perms )主要有以下几种:

Create 允许对子节点 Create 操作
Read 允许对本节点 GetChildren 和 GetData 操作
Write 允许对本节点 SetData 操作
Delete 允许对子节点 Delete 操作
Admin 允许对本节点 setAcl 操作

2.Java代码

2.1、创建时指定用户和密码、schema类型。

<span style="white-space:pre">	</span>private String auth = "";
private List<ACL> acls = null;

public ZKOperate(String userName,String password){
try {
auth = userName + ":" +password;
Id id = new Id("digest",DigestAuthenticationProvider.generateDigest(auth));
ACL acl = new ACL(ZooDefs.Perms.ALL, id);
acls = Collections.singletonList(acl);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}

设置之后,对应操作Zookeeper信息,需要匹配用户名和密码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息