zk Acl权限:只有一个账号有crdwa权限,匿名用户只有r权限
2019独角兽企业重金招聘Python工程师标准>>>
起因
最近在做多租户改造,租户使用的配置项都要放到zk上(如数据库配置、redis配置、阿里oss配置、每个租户的域名配置等),每个子系统去zk读取配置。当配置信息改变时,通过zk的watch机制,给子系统发消息,子系统接收到消息之后,再去做相应的处理(如:租户1的数据库配置变了,就重新创建数据库连接池)。
图1:系统关系逻辑及问题描述
问题描述:
主要是只读的那些zkClient,不用账号密码,就能读(r)到zk上的数据。而不是给子系统分配账号密码。
子系统访问zk的时候,是不能带账号密码的。
如果用digest 给子系统分配统一的一个账号密码,在代码的层面是可以实现的。
但是老大要求,子系统访问zk的时候,不能带着密码。而且,只能有读(r)权限。
思路
注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限
使用命令看一下world的权限是cdrwa(也就是anyone拥有所有权限)
所以,突然想到,能不能把world身份认证方式的默认权限设置成r,而admin的账号分配给crdwa权限。
于是使用代码:
public void set(String path, String data) {createPathIfNotExists(path);zkClient.writeData(path, data);}/*** 如果path不存在,则创建。** @param path*/private void createPathIfNotExists(String path) {String id = null;try {id = generateDigest("admin:admin"); // admin用户的账号:密码} catch (NoSuchAlgorithmException e) {throw new RRException("zk生成idPassword失败。zkPassword=" + zkPassword + ",zkPassword=" + zkPassword);}// 创建znode时,同时设置Acl权限:List<ACL> acl = new ArrayList<>();acl.add(new ACL(ZooDefs.Perms.ALL, new Id("digest", id)));acl.add(new ACL(ZooDefs.Perms.READ, new Id("world", "anyone")));createPersistentIfNotExists(path, acl);}private void createPersistentIfNotExists(String path, List<ACL> acl) {if (!zkClient.exists(path)) {zkClient.createPersistent(path, true, acl);}}
这样,world默认的权限就改为了readOnly的了:
参考
ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表
zookeeper ACL使用
然而,ACL毕竟仅仅是访问控制,并非完善的权限管理,通过这种方式做多集群隔离,还有很多局限性:
(1)ACL并无递归机制,任何一个znode创建后,都需要单独设置ACL,无法继承父节点的ACL设置。
(2)除了ip这种scheme,digest和auth的使用对用户都不是透明的,这也给使用带来了很大的成本,很多依赖zookeeper的开源框架也没有加入对ACL的支持,例如hbase,storm
Zookeeper API 和 Zkclient
2. session的超时问题:
ZKClient框架里会经常看见一些while语句,是由这些while语句完成的,比如ZkClient.retryUntilConnected方法
(感谢紫川的反馈,此条可能存在描述性问题。经校对:ZkClient貌似还是有对Session Expired 处理的,在ZkClient.processStateChanged方法中。虽然能重新连接,但是连接上是一个新的 session,原有创建的ephemeral znode(即临时节点)和watch会被删除,程序上你可能需要处理这个问题。欢迎大家提出意见,万分感谢)
对上面引用的补充:zkClient重新连接之后,还会把通过org.I0Itec.zkclient.ZkClient#addAuthInfo方法设置的权限信息给删掉。也需要自己去处理这个问题。详情:
org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /nb-conf
转载于:https://my.oschina.net/anxiaole/blog/1814143
zk Acl权限:只有一个账号有crdwa权限,匿名用户只有r权限相关推荐
- apache2 wordpress目录权限_小白指南:WordPress中的用户角色和权限
WordPress本身自带了一套用户角色管理系统,这套系统定义了每个用户角色可以做什么,不可以做什么.随着网站的发展,弄懂这些用户角色和权限的问题是非常有必要的.在这篇小白指南中,我们将用图表的形式对 ...
- linux匿名用户有写入权限,Linux vsftpd匿名用户开放上传,写入,创建,删除权限
Linux vsftpd匿名用户开放上传,写入,创建,删除权限 Linux vsftpd匿名用户开放上传,写入,创建,删除权限 安装vsftpd软件包 编辑配置文件,格式要注意,等于号的前后不能有空格 ...
- linux每一个账号都须具备,Linux 用户管理
Linux 系统是一个多用户多任务的分时操做系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个帐号,而后以这个帐号的身份进入系统.用户的帐号一方面能够帮助系统管理员对使用系统的用户进行 ...
- linux下创建文件没有权限,分享一个Linux无法创建文件夹,但是目录权限却显示正常的问题和解决...
今天发现一个疑难杂症:发现批量发布一个新版本程序时,发现有一台没有成功.亲自登陆上去看了下,发现原来是发布帐号在某个目录下创建目录失败了! 人工 touch 试了下,发现提示没有权限. 然后 ls - ...
- springcloud工作笔记093---springcloud封装按钮权限控制_思路和实现_根据用户拥有的权限控制是否显示某个按钮
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 1.设计思路,首先在sc-auth验证用户登录的微服务中,给用户表添加一个 @Transient ...
- linux创建表空间 没有权限,Linux oracle数据库创建表空间、用户并赋予权限
管理员用户登录oracle数据库 1.创建临时表空间 select name from v$tempfile;查出当前数据库临时表空间,主要是使用里面的存放路径: 得到其中一条记录/opt/oracl ...
- 《Linux基础三》用户和文件权限管理
用户和文件权限管理 1,用户 管理员用户: Root用户,也称根用户.超级用户.超级管理员 可对根目录执行读写和执行操作 具有系统中的最高.所有权限 普通用户: 权限有限的用户 Root用户拥有系统的 ...
- linux管理用户和文件权限
第四章:管理用户和文件权限实验报告 1 实验案例一:用户和文件权限管理 1.1 实验环境: 公司的Linux主机即将提供给技术部作为开发服务器使用,根据部门内项目 ...
- Spring Security用户认证和权限控制(默认实现)
1 背景 实际应用系统中,为了安全起见,一般都必备用户认证(登录)和权限控制的功能,以识别用户是否合法,以及根据权限来控制用户是否能够执行某项操作. Spring Security是一个安全相关的框架 ...
最新文章
- linux 查看域名解析,linux查询服务器域名解析记录
- Redmonk 发布 Java 框架流行度调研结果
- 智能合约重构社会契约(7)以太坊总结
- [css] 你有使用过css的writing-mode属性吗?说说它有哪些应用场景?
- RDP协议详细解析(二)
- Bailian2980 大整数乘法【大数】
- MySQL索引的原理,B+树、聚集索引和二级索引的结构分析
- Win11进桌面闪屏,亲测恢复正常
- 【机器人基础】机器人阻抗控制概念
- 每周全球科技十大新闻(2020.8.17-8.23)
- 按计算机用途分可将电子计算机分为,2012会计证考试会计电算化:计算机产生及分类...
- 脑科学读物阅读笔记系列 - 拉马钱德兰《脑中魅影》- 2. 幻肢痛
- HTML游戏黑屏,“网页游戏黑屏,白屏,无法调出flash.”的解决方案
- Ubuntu 16.04 下安装网易云
- 引擎TA校园招聘: 搜狐畅游 追光者计划简介
- 【ACM程序设计实验】高分课程实验报告分享
- H5视频播放器开发-基础篇
- Linux版的杀毒软件——avast
- 计算机视觉导论试题,计算机视觉导论
- html一行的宽度设置,html – 将一行表格框的总宽度扩展到100%
热门文章
- python计算奖金_2020还有3个月,收了这套Python资料,年终奖翻倍!
- java %= %,JavaWeb
- java注解机制_Java 注解机制
- 常见数字IC设计、FPGA工程师面试题
- SharePoint 2013 创建一个搜索中心和搜索设置
- 【HIMI转载推荐之三】基于Cocos2dx引擎UI扩展引擎包[cocos2d-x-3c]
- Shiro 权限框架使用总结
- 数据库性能测试方案示例
- “卖我一枝笔”:如何史蒂夫·乔布斯将这一经典问题作出回应?
- 企业开发与社交开发相辅相成