我已经阅读了有关mongodb 基于角色的访问控制的内容,并且在很大程度上理解了它。我正在阅读本教程,当您在 mongo shell 上运行 show roles 时,它会为给定数据库返回一组不同的角色。
- 为什么每个数据库都有自己的角色?然而,我们将角色分配给用户。这是否意味着如果您在该数据库中创建一个用户,他们只能分配该数据库中存在的角色?
- 与将所有用途保存在单个数据库中相比,拥有身份验证数据库的重要性是什么,例如管理员?拥有不同的身份验证数据库有什么好处吗?
我已经阅读了有关mongodb 基于角色的访问控制的内容,并且在很大程度上理解了它。我正在阅读本教程,当您在 mongo shell 上运行 show roles 时,它会为给定数据库返回一组不同的角色。
我认为在数据库中定义
users
和roles
其他任何地方都没有任何意义。admin
如果您在其他地方定义它们,那么您的用户/角色管理可能会变得难以管理。从db.createRole():
因此,在“非管理员”数据库中创建角色会受到更多限制。但是,创建用户和角色通常是一项管理员任务,并且通常管理员无论如何都拥有全部权力。也许当您想提供一个 MongoDB 游乐场(例如https://mongoplayground.net/)时,这样的限制可能会很有用。
请注意,当您运行 MongoDB Sharded Cluster时,用户和角色通常在 Config Server Replica Set 中定义。当您直接连接到分片时,分片会联系配置服务器以验证您的连接。但是,当您的分片与集群断开连接时,它就无法联系配置服务器。为此,您可以直接在分片上定义分片本地用户,请参阅创建分片本地用户管理员。我认为这是用户未在公共
admin
数据库中定义的唯一有用的例外。