Docker Solr7多Core权限隔离求助:Basic Auth配置未生效
解决Solr单节点Core权限隔离问题
我来帮你搞定这个权限隔离的问题!你当前的配置核心问题在于没有设置默认拒绝所有未明确授权的操作,而且权限规则的覆盖范围不够细致,导致sandbox2用户依然能访问sandbox1的Core。下面是具体的解决步骤和修正后的配置:
问题根源
Solr的RuleBasedAuthorizationPlugin默认是允许所有操作的,除非你添加明确的拒绝规则。你现在只配置了允许特定角色访问对应Core的规则,但没有阻止其他角色访问不属于他们的Core,所以跨Core访问的情况依然会发生。
修正后的security.json配置
{ "authentication": { "blockUnknown": true, "class": "solr.BasicAuthPlugin", "credentials": { "solr": "KzdeDy9vIPliG3IsrvZJJt5L8LJQsK+o8fyTQ4g5b8g= rNwIT3FVvt6dqfRTFzNfehMcuGXaG1uipAVVJ71zgXw=", "sandbox2": "Yyz547gwtwHBJkWl3AdYn5wUKZX28JMjm5J6pI4enBY= 7idFe+baqhDzjOPR5Q9N3hS/0kCrWoZFdfwEl0zD298=", "sandbox1": "b/my6RlkYNzh11MjU8M16aYbcXRCjU9vbXH8kUnuWw4= B3Mpuenz0JtdWlQ5FMg1wv/1TtoJ6n3IILeVhgZvga0=" }, "": { "v": 0 } }, "authorization": { "class": "solr.RuleBasedAuthorizationPlugin", "permissions": [ { "name": "*", "role": "*", "deny": true, "index": 0 }, { "name": "security-edit", "role": "admin", "index": 1 }, { "collection": "sandbox1", "role": "sandbox1_manager", "name": "core-read", "index": 2 }, { "collection": "sandbox1", "role": "sandbox1_manager", "name": "core-write", "index": 3 }, { "collection": "sandbox2", "role": "sandbox2_manager", "name": "core-read", "index": 4 }, { "collection": "sandbox2", "role": "sandbox2_manager", "name": "core-write", "index": 5 } ], "user-role": { "solr": "admin", "sandbox2": "sandbox2_manager", "sandbox1": "sandbox1_manager" }, "": { "v": 0 } } }
配置说明
- 默认拒绝规则(index=0):
- 这条规则放在最前面,会先匹配所有操作和所有角色,直接拒绝未被后续规则允许的请求,这是实现权限隔离的关键。
- 细化Core权限:
- 用Solr内置的
core-read(包含查询、读取Core数据等操作)和core-write(包含更新、修改Core数据等操作)权限,替代你之前自定义的sandbox1.manager这类权限,确保覆盖所有必要的Core操作。 - 每个Core的权限都明确绑定到对应的角色,且限定了
collection字段,确保只有对应角色能访问指定Core。
- 用Solr内置的
- 规则顺序:
- Solr的权限规则是按
index从小到大匹配的,所以默认拒绝规则必须放在最前面,之后再依次添加允许规则。
- Solr的权限规则是按
生效配置
修改完成后,你可以通过Solr API重新加载安全配置:
curl -u solr:你的密码 -X POST -H 'Content-type:application/json' --data-binary @security.json http://localhost:8983/solr/admin/security
如果是单节点实例,也可以直接重启Solr服务让配置生效。
这样配置后,sandbox1用户就只能访问sandbox1 Core,sandbox2用户只能访问sandbox2 Core,完美实现权限隔离啦!
内容的提问来源于stack exchange,提问作者rroblik
相关产品推荐
相关产品推荐

