无法在MongoDB中的单独数据库中创建管理员用户

无法在MongoDB中的单独数据库中创建管理员用户,mongodb,security,authorization,Mongodb,Security,Authorization,我使用的是MongoDB版本2.6.2,有两个数据库-管理员和书籍。 在以前版本的MongoDB(1.*)中,我可以分别为每个数据库创建管理员用户。现在,每当我尝试为第二个db创建用户时,它们仍然会添加到第一个db中。 以下是mongo shell输出的摘录: /* creating admin db */ > use admin; switched to db admin > db.createUser( { "user" : "admin_root", "pwd": "pass"

我使用的是MongoDB版本2.6.2,有两个数据库-管理员和书籍。 在以前版本的MongoDB(1.*)中,我可以分别为每个数据库创建管理员用户。现在,每当我尝试为第二个db创建用户时,它们仍然会添加到第一个db中。 以下是mongo shell输出的摘录:

/* creating admin db */
> use admin;
switched to db admin
> db.createUser( { "user" : "admin_root", "pwd": "pass", "roles" : ["root"] } )
Successfully added user: { "user" : "admin_root", "roles" : [ "root" ] }

/* creating books db */
> use books;
switched to db books
> db.createUser( { "user" : "admin_books", "pwd": "pass", "roles" : ["dbOwner"] } )
Successfully added user: { "user" : "admin_books", "roles" : [ "dbOwner" ] }
> db.createUser( { "user" : "logger", "pwd": "pass", "roles" : ["readWrite"] } )
Successfully added user: { "user" : "logger", "roles" : [ "readWrite" ] }

/* users in books db */
> db.system.users.find()
> /* Nothing here */

/* users in admin db */
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "admin.admin_root", "user" : "admin_root", "db" : "admin", "credentials" : { "MONGODB-CR" : "082e4c55ecb7993eb3b1825fe7df8902" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "books.admin_books", "user" : "admin_books", "db" : "books", "credentials" : { "MONGODB-CR" : "0384574df69c4b809c4432f79c0d8a97" }, "roles" : [ { "role" : "dbOwner", "db" : "books" } ] }
{ "_id" : "books.logger", "user" : "logger", "db" : "books", "credentials" : { "MONGODB-CR" : "307b0eac760bd1031b82908c84a231d6" }, "roles" : [ { "role" : "readWrite", "db" : "books" } ] }
>

我做错什么了吗?

这是正确的行为。正在为用户分配的数据库创建具有正确凭据和角色的用户。例如,数据库管理中“system.users”集合中的此文档:

{ "_id" : "books.admin_books", "user" : "admin_books", "db" : "books", "credentials" : { "MONGODB-CR" : "0384574df69c4b809c4432f79c0d8a97" }, "roles" : [ { "role" : "dbOwner", "db" : "books" } ] }
清楚地表明该用户具有数据库“books”的“dbOwner”角色

也许您感到困惑的是,所有这些用户都存储在“admin”数据库中的“system.users”集合中。这是存储所有用户信息的地方。从文件中:

管理系统用户

在版本2.6中更改

admin.system.users集合存储用户的身份验证 凭据以及分配给用户的任何角色。用户可以 在admin.system.roles集合中定义授权角色


是什么让你觉得有什么不对?@AsyaKamsky我希望我能够添加一个数据库管理员来管理它的数据库用户。似乎现在我必须从admin db管理它们。您确实将该用户添加到了admin db中,这是2.6处理该用户的方式。@AsyaKamsky这可能是一个离题,但我需要向admin用户授予任何额外权限吗?因为如果我尝试使用它查询db.system.users,当启用身份验证时,我会得到“QueryFailure标志未被授权查询books.system.users”。您是否作为正确的用户进行了身份验证(针对admin db?还是针对您正在查询的db?)