MongoDB:我应该将用户放在admin数据库还是local数据库中?

5

在MongoDB中,放置数据库用户的最佳实践是什么?

我刚刚搭建了本地MongoDB服务器,并在管理员数据库中添加了用户,并授予了他们访问“他们”(我指用户唯一可以访问的数据库)数据库的权限。

您认为将用户放置在“他们”的数据库而不是管理员数据库中会更好吗?


1
一个集中式的管理数据库简化了用户管理和连接管理,但如果您在操作查询中使用任何*管理员角色,则安全性较低。 - Alex Blex
1个回答

7
无论用户的身份验证数据库是什么,Mongo始终将用户信息存储在admin中。

MongoDB将所有用户信息(包括名称、密码和用户的身份验证数据库)存储在admin数据库的system.users集合中。

请参见集中式用户数据系统用户集合

当您创建用户并授予该用户访问单个数据库(也就是他们的身份验证数据库)的权限时,该信息只能存储在admin数据库中。

因此,并不是一个"最佳实践"的问题;将用户详细信息存储在admin中是MongoDB的选择,由其用户管理命令实现。

更新:回应此评论:

好的,所以用户始终位于管理员数据库中,但我也可以将“重复项”添加到其他数据库中吗?也许问题应该是在将用户添加到其他“非管理员”数据库中是否有任何优势?

如果您打算让单个用户访问多个数据库,则应创建一个具有每个数据库中角色的单个用户,而不是在每个数据库中多次创建该用户。例如:

use admin;
db.createUser({user:'userName', pwd:'passwordValue', roles:[
    {role:'readWrite', db:'DatabaseA'},
    {role:'readWrite', db:'DatabaseB'}
]});

2
我认为这个问题是关于逻辑数据库而不是物理存储的。即system.users集合中的db字段和连接的authenticationDatabase选项。详细说明一下,use their; db.createUser({user:'u', pwd:'u', roles:[{role:'readWrite', db:'their'}]}); use admin; db.createUser({user:'u', pwd:'u', roles:[{role:'readWrite', db:'their'}]});将创建两个不同的用户,具有相同的名称、密码和权限。唯一的区别是认证数据库——系统用户集合中的_id前缀和db字段。 - Alex Blex
我最初怀疑的是这个陈述:“通过他们,我的意思是用户可以访问的唯一数据库”,这使我认为问题基于对用户数据位置的误解,而不是关于多个用户名或用户访问多个数据库的问题。 - glytching
没错,问题的措辞并不理想,但由于您可以创建完全相同的用户,唯一的区别在于认证数据库,所以显而易见的问题是要使用哪一个。在回答中给出一些建议将会很好。 - Alex Blex
1
好的,所以用户始终位于管理员数据库中,但我也可以将“重复项”添加到其他数据库中吗?也许问题应该是是否有优势将用户添加到其他“非管理员”数据库中?(对于措辞不当,我很抱歉,因为我不是以英语为母语的人) - mortb
您的英文没有问题 :) 只是这个区域有些模糊:「认证数据库」可以与分配访问权限的数据库不同,无论「认证数据库」或分配访问权限的数据库名称如何,所有细节都存储在“admin”中。因此,混淆的空间很多 :) - glytching

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接