在Mongo中创建超级用户

52

我正在尝试在Mongo中创建一个用户,该用户可以在任何数据库中执行任何操作。

根据指南,我创建了一个新的管理员:http://docs.mongodb.org/manual/tutorial/add-user-administrator

以下是代码:

use admin
db.addUser( { user: "try1",
              pwd: "hello,
              roles: [ "userAdminAnyDatabase" ] } )

然后我停止了Mongo,启用了身份验证并重新启动了Mongo。

然后我尝试使用他的用户创建一个数据库。

根据这个指南:http://www.mkyong.com/mongodb/how-to-create-database-or-collection-in-mongodb/

use fragola 
db.users.save( {username:"fragolino"} )

我收到了这个信息:“无权在fragola.users上进行插入操作”

有人能帮助我吗?

2个回答

72

来自docs.mongodb.org-superuser-roles

让我们编写一个看起来简单且易于实现的答案

步骤:

1:在新终端中运行sudo apt-get install mongodb-org

2:运行sudo mongod --port 27017 --dbpath /var/lib/mongodb

3:在新终端中运行mongo --port 27017

4:运行use admin

5:如@drmirror所说,用户应具备所有4种角色才能成为超级用户

适用于Mongo版本2。

db.createUser(
{
    user: "tom",
    pwd: "jerry",
    roles: [
              { role: "userAdminAnyDatabase", db: "admin" },
              { role: "readWriteAnyDatabase", db: "admin" },
              { role: "dbAdminAnyDatabase", db: "admin" },
              { role: "clusterAdmin", db: "admin" }
           ]
})

适用于Mongo 3版本。

db.createUser(
   {
       user: "tom", 
       pwd: "jerry", 
       roles:["root"]
   })

6: sudo /etc/init.d/mongod stopsudo service mongod stop - 在新终端中执行

7: sudo /etc/init.d/mongod startsudo service mongod start

8: 重新启动您的计算机

9: sudo mongod --auth --port 27017 --dbpath /var/lib/mongodb - 在新终端中执行

10: mongo --port 27017 -u "tom" -p "jerry" --authenticationDatabase "admin" - 在新终端中执行

注意第10步最为重要。

它将在终端上输出结果。

MongoDB shell version: 2.6.11
connecting to: 127.0.0.1:27017/test
>

2
你需要放置db和role,例如roles:[{role:'root', db:'admin'}]。 - Having a life on a beach
1
@mpoletto 如果该命令是在管理数据库内执行的,则角色数组不需要键/值对来指定管理数据库。 - jmrah
这对我起作用了,不需要重新启动电脑,只需重启服务即可。 - JJP
从版本4.2开始,您可以甚至应该使用函数passwordPrompt(),例如:db.createUser({user:"superuser", pwd:passwordPrompt(), roles:["root"]})。这被认为比在屏幕上输入密码更安全。请注意,密码提示仅显示一次。它不会要求您重新输入密码。 - Wojciech Jakubas

63

角色userAdminAnyDatabase赋予用户创建用户并分配任意角色的能力。因此,该用户有权对数据库进行任何操作,因为他可以授予其他任何人任何权限(包括自己)。

但是,userAdminAnyDatabase角色本身除了分配任意权限给任意用户之外,并不允许用户执行任何其他操作。要在数据库上执行实际操作,该用户需要具备以下额外的角色:

readWriteAnyDatabase
dbAdminAnyDatabase
clusterAdmin

拥有上述三种权限并且具有userAdminAnyDatabase权限的用户才是真正的超级用户,可以执行任何操作。


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