[alibaba/nacos]nacos-2.0.3 集群模式下添加权限报错“role xxx not found”

2024-03-04 978 views
4

给角色授权时报错,提示 “role xxx not found ”

角色是已经创建成功的,授权对应存在的namespace 是 应该提示成功

提示错误,返回 role xxx not found

  1. 进入权限控制模块
  2. 绑定角色,角色是新建的,绑定成功
  3. 添加权限,给对应角色添加权限
  4. 提示 role xxx not found
  • OS: Centos 7
  • Version: 2.0.3
  • Module: console
mode:cluster 3节点 ,当我绑定角色时我的请求(/v1/auth/roles post)路由到了1节点,role 会被持久化到数据库后再被添加到 本地缓存 (roleSet )中。roleSet 的刷新间隔是15s,而在此期间我添加权限的请求(/v1/auth/permissions)被路由到了节点二,这个节点的 roleSet 没有我创建role ,所以报了非法参数异常,这里我有个疑问,在方法 NacosRoleServiceImpl#addPermisison 中!roleSet.contains(role) == true 时为什么不再查一遍数据库呢?

回答

2

更新到新版本,然后清理下浏览器缓存再试下

5

看了下2.2.1和 2.0.3 的 授权源码NacosRoleServiceImpl#addPermisiso 实现看起来没有改动 image image 集群模式下,本地缓存roleset 更新频率是15s。授权的时候可能刚好在这15s期间,刚好请求又落到别的节点上,就会提示错误,我觉的当!roleSet.contains(role) == true 再查一次库,查完更新roleset是否会更严谨点

3

如果不异步,改为同步查询,那大量查询不存在role可能会造成数据库压力。

这个缓存15s更新应该问题不大, role之类的信息不是很频繁变更的信息。

6

可以不可以只针对addPermission这个场景,这个场景在addPermission执行的时候确实会对已经添加成功的角色报角色不存在的错误提示,查完再添加到roleset中,应该不会有大量查询,毕竟添加权限也不是很频繁操作,但是可以解决这个bug

1

正常使用当然没问题,鉴权这些接口不是容易被安全工程师进行各种测试吗,这种非正常的时候会容易出问题。

如果您觉得在你们的环境里可以接受, 可以在默认插件中加个功能, 通过开关的方式关闭缓存,每次都查询数据库;开关默认开启缓存。

6

可能是我表达的有问题,我是单指addPermisson 这个接口逻辑(这个接口是授权操作的时候会调用,目前应该只有控制台前端会调)

image

,不属于鉴权那一层,鉴权的缓存肯定是保留的

3

鉴权的时候,是其他的请求需要进行鉴权, 这部分性能是必要损耗,预期内的。

但是addPermisson,addRole等接口,正常使用下只会有少量的请求, 但是异常情况下(比如安全工程师扫描,大量发起非法请求时)尽可能把请求拦截在应用层,不打到数据库,能有效保护数据库。

而且前面 也提到了,正常使用的时候,这个用量会比较少,所以缓存生效有个几秒影响也不是很大。

正常使用当然没问题,鉴权这些接口不是容易被安全工程师进行各种测试吗,这种非正常的时候会容易出问题。

如果您觉得在你们的环境里可以接受, 可以在默认插件中加个功能, 通过开关的方式关闭缓存,每次都查询数据库;开关默认开启缓存。

所以最后还是看场景, 如果你觉得对你没什么影响,加上功能和开关,默认保持现状就好了。

3

明白了,感谢