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权限相关推荐

  1. apache2 wordpress目录权限_小白指南:WordPress中的用户角色和权限

    WordPress本身自带了一套用户角色管理系统,这套系统定义了每个用户角色可以做什么,不可以做什么.随着网站的发展,弄懂这些用户角色和权限的问题是非常有必要的.在这篇小白指南中,我们将用图表的形式对 ...

  2. linux匿名用户有写入权限,Linux vsftpd匿名用户开放上传,写入,创建,删除权限

    Linux vsftpd匿名用户开放上传,写入,创建,删除权限 Linux vsftpd匿名用户开放上传,写入,创建,删除权限 安装vsftpd软件包 编辑配置文件,格式要注意,等于号的前后不能有空格 ...

  3. linux每一个账号都须具备,Linux 用户管理

    Linux 系统是一个多用户多任务的分时操做系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个帐号,而后以这个帐号的身份进入系统.用户的帐号一方面能够帮助系统管理员对使用系统的用户进行 ...

  4. linux下创建文件没有权限,分享一个Linux无法创建文件夹,但是目录权限却显示正常的问题和解决...

    今天发现一个疑难杂症:发现批量发布一个新版本程序时,发现有一台没有成功.亲自登陆上去看了下,发现原来是发布帐号在某个目录下创建目录失败了! 人工 touch 试了下,发现提示没有权限. 然后 ls - ...

  5. springcloud工作笔记093---springcloud封装按钮权限控制_思路和实现_根据用户拥有的权限控制是否显示某个按钮

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 1.设计思路,首先在sc-auth验证用户登录的微服务中,给用户表添加一个 @Transient ...

  6. linux创建表空间 没有权限,Linux oracle数据库创建表空间、用户并赋予权限

    管理员用户登录oracle数据库 1.创建临时表空间 select name from v$tempfile;查出当前数据库临时表空间,主要是使用里面的存放路径: 得到其中一条记录/opt/oracl ...

  7. 《Linux基础三》用户和文件权限管理

    用户和文件权限管理 1,用户 管理员用户: Root用户,也称根用户.超级用户.超级管理员 可对根目录执行读写和执行操作 具有系统中的最高.所有权限 普通用户: 权限有限的用户 Root用户拥有系统的 ...

  8. linux管理用户和文件权限

    第四章:管理用户和文件权限实验报告 1           实验案例一:用户和文件权限管理 1.1          实验环境: 公司的Linux主机即将提供给技术部作为开发服务器使用,根据部门内项目 ...

  9. Spring Security用户认证和权限控制(默认实现)

    1 背景 实际应用系统中,为了安全起见,一般都必备用户认证(登录)和权限控制的功能,以识别用户是否合法,以及根据权限来控制用户是否能够执行某项操作. Spring Security是一个安全相关的框架 ...

最新文章

  1. linux 查看域名解析,linux查询服务器域名解析记录
  2. Redmonk 发布 Java 框架流行度调研结果
  3. 智能合约重构社会契约(7)以太坊总结
  4. [css] 你有使用过css的writing-mode属性吗?说说它有哪些应用场景?
  5. RDP协议详细解析(二)
  6. Bailian2980 大整数乘法【大数】
  7. MySQL索引的原理,B+树、聚集索引和二级索引的结构分析
  8. Win11进桌面闪屏,亲测恢复正常
  9. 【机器人基础】机器人阻抗控制概念
  10. 每周全球科技十大新闻(2020.8.17-8.23)
  11. 按计算机用途分可将电子计算机分为,2012会计证考试会计电算化:计算机产生及分类...
  12. 脑科学读物阅读笔记系列 - 拉马钱德兰《脑中魅影》- 2. 幻肢痛
  13. HTML游戏黑屏,“网页游戏黑屏,白屏,无法调出flash.”的解决方案
  14. Ubuntu 16.04 下安装网易云
  15. 引擎TA校园招聘: 搜狐畅游 追光者计划简介
  16. 【ACM程序设计实验】高分课程实验报告分享
  17. H5视频播放器开发-基础篇
  18. Linux版的杀毒软件——avast
  19. 计算机视觉导论试题,计算机视觉导论
  20. html一行的宽度设置,html – 将一行表格框的总宽度扩展到100%

热门文章

  1. python计算奖金_2020还有3个月,收了这套Python资料,年终奖翻倍!
  2. java %= %,JavaWeb
  3. java注解机制_Java 注解机制
  4. 常见数字IC设计、FPGA工程师面试题
  5. SharePoint 2013 创建一个搜索中心和搜索设置
  6. 【HIMI转载推荐之三】基于Cocos2dx引擎UI扩展引擎包[cocos2d-x-3c]
  7. Shiro 权限框架使用总结
  8. 数据库性能测试方案示例
  9. “卖我一枝笔”:如何史蒂夫·乔布斯将这一经典问题作出回应?
  10. 企业开发与社交开发相辅相成