我正在尝试对MongoDB服务器实施一些限制:
我的服务器上的两个数据库应该限制删除/删除操作 - 只允许一个特殊的用户帐户这样做。所有其他数据库应完全不受限制(当然不包括管理数据库):
我尝试使用两个用户来模拟这种情况:
| database A & B | all the other databases |
---------------------------------------------------------
user a | read & write | read & write |
user b | read-only | read & write |
使用readAnyDatabase
角色可以轻松地让所有人阅读所有数据库。
然而,用户b的建模只能读取数据库A& B但是已阅读&对所有其他数据库(包括稍后创建的数据库)的写访问权让我头疼。
如何在MongoDB中实现此安全模型?
答案 0 :(得分:2)
这是不可能的。
您可以组合多个角色并从多个数据库继承它们,但是:
授予角色后,用户将获得该角色的所有权限。 用户可以同时拥有多个角色,在这种情况下是用户 获得相应角色的所有权限的联盟。
-
角色始终授予权限,从不限制访问权限。例如,如果 用户在数据库上同时拥有读取和 readWriteAnyDatabase 角色,更高的访问权限优先。
您可以在mongodb authorization doc中找到这些段落。
为了对将来的所有数据库进行读写,您需要将readWriteAnyDatabase
角色设置为userb。这意味着,对于A和B数据库,您无法降级为read
角色。
我担心您需要为新dbs手动设置角色。
答案 1 :(得分:0)
首先在mongodb.conf
文件中启用身份验证
auth = true
创建一个数据库perm
,用于保存我们将在下面创建的用户权限。
use perm
然后使用userb
和DatabaseA
的只读权限创建DatabaseB
db.createUser(
{
user: "userb",
pwd: "12345",
roles: [
{ role: "read", db: "DatabaseA" },
{ role: "read", db: "DatabaseB" }
]
}
)
userb
只会被允许阅读DatabaseA
和DatabaseB
其他所有数据库访问userb将是read-write
现在userb
可以使用以下命令登录
mongo --port 27017 -u userb -p 12345 --authenticationDatabase perm
答案 2 :(得分:0)
你应该使用
security:
authorization: enabled
而不是auth = true
,至于其余的Rohit答案完成了这项工作。