MongoDB“根”用户

jdzmm42g  于 2022-12-26  发布在  Go
关注(0)|答案(8)|浏览(139)

MongoDB是否有一个超级UNIX用户,比如“root”用户?我一直在研究http://docs.mongodb.org/manual/reference/user-privileges/,并尝试了许多组合,但它们似乎都在某个方面有所欠缺。当然,有一个角色是最重要的。

2cmtqfgy

2cmtqfgy1#

最佳超级用户角色是root。语法为:

use admin

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

有关详细信息,请参阅built-in roles.

5t7ly7z5

5t7ly7z52#

虽然MongoDb没有身份验证,但是您可以通过对admin数据库的特定用户使用"any"角色来创建根/超级用户的等价物。
大概是这样的

use admin
db.addUser( { user: "<username>",
          pwd: "<password>",
          roles: [ "userAdminAnyDatabase",
                   "dbAdminAnyDatabase",
                   "readWriteAnyDatabase"

] } )

更新为2.6 +

虽然Python 2.6中有一个新的root用户,但您可能会发现它不能满足您的需要,因为它仍然有一些限制:
提供对readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase和clusterAdmin角色组合的操作和所有资源的访问权限。
root不包括对以system.prefix开头的集合的任何访问权限。

更新为3.0 +

使用db.createUser,因为已删除db.addUser

针对3.0.7+进行更新

root不再具有上述限制。
root对system.collections具有validate权限操作。以前,root不包括对以system.prefix开头的集合的任何访问权限,system.indexes和system.namespace除外。

uajslkp6

uajslkp63#

Mongodb用户管理:
角色列表:

read
readWrite
dbAdmin
userAdmin
clusterAdmin
readAnyDatabase
readWriteAnyDatabase
userAdminAnyDatabase
dbAdminAnyDatabase

创建用户:

db.createUser(user, writeConcern)

db.createUser({ user: "user",
  pwd: "pass",
  roles: [
    { role: "read", db: "database" } 
  ]
})

更新用户:

db.updateUser("user",{
  roles: [
    { role: "readWrite", db: "database" } 
  ]
})

删除用户:

db.removeUser("user")

db.dropUser("user")

查看用户:

db.getUsers();

**详细信息:**docs.mongodb.com/manual/reference/security/#read

1sbrub3j

1sbrub3j4#

存在超级用户角色:root(内置角色)可能符合您的需要。

7rtdyuoh

7rtdyuoh5#

我注意到了很多这样的答案,使用以下命令:

use admin

这会切换到管理数据库。至少在Mongo v4.0.6中,在管理数据库的上下文中创建一个用户将创建一个"_id" : "admin.administrator"

> use admin
> db.getUsers()
[ ]
> db.createUser({ user: 'administrator', pwd: 'changeme', roles: [ { role: 'root', db: 'admin' }  ] })
> db.getUsers()
[
    {
        "_id" : "admin.administrator",
        "user" : "administrator",
        "db" : "admin",
        "roles" : [
            {
                "role" : "root",
                "db" : "admin"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
]

我强调"admin.administrator",因为我有一个Mongoid(mongodb ruby adapter)应用程序,它的数据库与admin不同,我使用URI来引用mongoid.yml配置中的数据库:

development:
  clients:
    default:
      uri: <%= ENV['MONGODB_URI'] %>
      options:
        connect_timeout: 15
        retry_writes: false

这将引用以下环境变量:

export MONGODB_URI='mongodb://administrator:changeme@127.0.0.1/mysite_development?retryWrites=true&w=majority'

请注意,数据库是mysite_development,而不是admin。当我尝试运行应用程序时,收到错误消息"User administrator(mechanism:scram256)未被授权访问mysite_development "。
因此,我返回Mongo shell删除用户,切换到指定的数据库并重新创建用户:

$ mongo
> db.dropUser('administrator')
> db.getUsers()
[]
> use mysite_development
> db.createUser({ user: 'administrator', pwd: 'changeme', roles: [ { role: 'root', db: 'admin' }  ] })
> db.getUsers()
[
    {
        "_id" : "mysite_development.administrator",
        "user" : "administrator",
        "db" : "mysite_development",
        "roles" : [
            {
                "role" : "root",
                "db" : "admin"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
]

注意,_id和db更改为引用应用程序所依赖的特定数据库:

"_id" : "mysite_development.administrator",
"db" : "mysite_development",

在做了这个更改之后,错误消失了,我能够在应用程序中连接到MongoDB。
额外注解:
在上面的例子中,我删除了用户,并在正确的数据库上下文中重新创建了用户。如果您已经在正确的数据库上下文中创建了用户,但赋予了错误的角色,您可以为用户分配一个mongodb内置角色:

db.grantRolesToUser('administrator', [{ role: 'root', db: 'admin' }])

还有一个db.updateUser命令,albiet通常用于更新用户密码。

drkbr07n

drkbr07n6#

通常的做法是只将一个数据库用于整个系统的身份验证数据,在连接uri上,除了指定要连接使用的数据库之外,还可以指定要进行身份验证的数据库。
“蒙古数据库:usreName:passwordthatsN0tEasy2Gue55@mongodb.myDmoain.com:27017/enduserdb?authSource=myAuthdb“
这样你就可以在一个认证数据库中创建你所有的用户凭证和角色。如果你想在一个数据库中创建一个成为所有和结束所有的超级用户,你只需要给我一个“root@thedbinquestion”的角色,例如...

use admin
db.runCommand({ 
"updateUser" : "anAdminUser", 
"customData" : {

}, 
"roles" : [
    {
        "role" : "root", 
        "db" : "thedbinquestion"
    } ] });
ttp71kqs

ttp71kqs7#

现在您可以在控制台中将内置角色更改为atlas admin;这解决了我的问题。

8i9zcol2

8i9zcol28#

“userAdmin实际上是特定数据库的超级用户角色。具有userAdmin权限的用户可以授予自己所有权限。但是,userAdmin不会显式授权用户拥有用户管理以外的任何权限。”from the link you posted

相关问题