【问题标题】:Create Superuser in mongo在 mongo 中创建超级用户
【发布时间】:2014-05-03 12:18:44
【问题描述】:

我正在尝试在 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”

谁能帮帮我?

【问题讨论】:

    标签: mongodb permissions database nosql


    【解决方案1】:

    from 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 个角色才能成为 superuser

    对于 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 : restart your pc

    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
    >
    

    【讨论】:

    • 你需要把db和role,比如roles:[{role:'root', db:'admin'}]
    • @mpoletto 如果从管理数据库中运行此命令,则角色数组不需要键/值对来指定管理数据库。
    • 这对我有用,但无需重启电脑,只需服务。
    • 从 4.2 版开始,您可以甚至应该使用函数 passwordPrompt(),即类似这样的东西:db.createUser({user:"superuser", pwd:passwordPrompt(), roles:["root"]})。这被认为比输入屏幕上可见的密码更安全。请注意,密码提示仅显示一次。它不会要求您重新输入密码。
    【解决方案2】:

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

    但是,userAdminAnyDatabase 角色本身不允许用户执行任何其他操作,除了将任意权限分配给任意用户。要在数据库上实际执行某些操作,该用户需要具有以下附加角色:

    readWriteAnyDatabase
    dbAdminAnyDatabase
    clusterAdmin
    

    拥有以上三个权限的用户userAdminAnyDatabase是真正的超级用户,可以做任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-22
      • 2015-02-17
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 2023-03-13
      相关资源
      最近更新 更多