给角色授权时报错,提示 “role xxx not found ”
角色是已经创建成功的,授权对应存在的namespace 是 应该提示成功
提示错误,返回 role xxx not found
- 进入权限控制模块
- 绑定角色,角色是新建的,绑定成功
- 添加权限,给对应角色添加权限
- 提示 role xxx not found
- OS: Centos 7
- Version: 2.0.3
- Module: console
给角色授权时报错,提示 “role xxx not found ”
角色是已经创建成功的,授权对应存在的namespace 是 应该提示成功
提示错误,返回 role xxx not found
更新到新版本,然后清理下浏览器缓存再试下
看了下2.2.1和 2.0.3 的 授权源码NacosRoleServiceImpl#addPermisiso 实现看起来没有改动 集群模式下,本地缓存roleset 更新频率是15s。授权的时候可能刚好在这15s期间,刚好请求又落到别的节点上,就会提示错误,我觉的当!roleSet.contains(role) == true 再查一次库,查完更新roleset是否会更严谨点
如果不异步,改为同步查询,那大量查询不存在role可能会造成数据库压力。
这个缓存15s更新应该问题不大, role之类的信息不是很频繁变更的信息。
可以不可以只针对addPermission这个场景,这个场景在addPermission执行的时候确实会对已经添加成功的角色报角色不存在的错误提示,查完再添加到roleset中,应该不会有大量查询,毕竟添加权限也不是很频繁操作,但是可以解决这个bug
正常使用当然没问题,鉴权这些接口不是容易被安全工程师进行各种测试吗,这种非正常的时候会容易出问题。
如果您觉得在你们的环境里可以接受, 可以在默认插件中加个功能, 通过开关的方式关闭缓存,每次都查询数据库;开关默认开启缓存。
可能是我表达的有问题,我是单指addPermisson 这个接口逻辑(这个接口是授权操作的时候会调用,目前应该只有控制台前端会调)
,不属于鉴权那一层,鉴权的缓存肯定是保留的
鉴权的时候,是其他的请求需要进行鉴权, 这部分性能是必要损耗,预期内的。
但是addPermisson,addRole等接口,正常使用下只会有少量的请求, 但是异常情况下(比如安全工程师扫描,大量发起非法请求时)尽可能把请求拦截在应用层,不打到数据库,能有效保护数据库。
而且前面 也提到了,正常使用的时候,这个用量会比较少,所以缓存生效有个几秒影响也不是很大。
正常使用当然没问题,鉴权这些接口不是容易被安全工程师进行各种测试吗,这种非正常的时候会容易出问题。
如果您觉得在你们的环境里可以接受, 可以在默认插件中加个功能, 通过开关的方式关闭缓存,每次都查询数据库;开关默认开启缓存。
所以最后还是看场景, 如果你觉得对你没什么影响,加上功能和开关,默认保持现状就好了。
明白了,感谢