在MongoDB中,放置数据库用户的最佳实践是什么?
我刚刚搭建了本地MongoDB服务器,并在管理员数据库中添加了用户,并授予了他们访问“他们”(我指用户唯一可以访问的数据库)数据库的权限。
您认为将用户放置在“他们”的数据库而不是管理员数据库中会更好吗?
在MongoDB中,放置数据库用户的最佳实践是什么?
我刚刚搭建了本地MongoDB服务器,并在管理员数据库中添加了用户,并授予了他们访问“他们”(我指用户唯一可以访问的数据库)数据库的权限。
您认为将用户放置在“他们”的数据库而不是管理员数据库中会更好吗?
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'}
]});
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