mongodb用户无需任何身份验证即可登录

时间:2020-04-17 00:35:54

标签: mongodb

首次安装mongodb时,没有root用户。您只需以“ mongod --dbpath ='/ usr / local / var / mongodb'”(如果在mac osx上)启动mongo,然后在shell中运行mongo,它将无需任何身份验证即可连接您。

我在admin数据库中创建admin用户:

> db
admin

> db.createUser({
  "user" : "test1",
  "pwd" : "test1",
  "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ]
})

> db.getUsers()
[
    {
        "_id" : "admin.test1",
        "user" : "test1",
        "db" : "admin",
        "roles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
]

现在,我以管理员用户身份连接到mongo shell:

> db
admin
> db.runCommand({connectionStatus : 1})
{
    "authInfo" : {
        "authenticatedUsers" : [
            {
                "user" : "test1",
                "db" : "admin"
            }
        ],
        "authenticatedUserRoles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            }
        ]
    },
    "ok" : 1
}

我使用访问控制启动mongod:

$ sudo mongod --auth --port 27017 --dbpath=.
Password:
2020-04-16T20:28:40.656-0400 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2020-04-16T20:28:40.672-0400 I CONTROL  [initandlisten] MongoDB starting : pid=8441 port=27017 dbpath=. 64-bit 

我什至启用了安全性

$ cd /usr/local/etc/
$ vim mongod.conf
security:
  authorization: "enabled"

但是我只能使用“ mongo”登录:

$ mongo admin
MongoDB shell version v4.0.4
connecting to: mongodb://127.0.0.1:27017/admin
Implicit session: session { "id" : UUID("95879725-00ed-4cee-bd43-8ba093df1e19") }
MongoDB server version: 4.0.4
> db.runCommand({connectionStatus : 1})
{
    "authInfo" : {
        "authenticatedUsers" : [ ],
        "authenticatedUserRoles" : [ ]
    },
    "ok" : 1
}

这很疯狂。我还必须做什么?除非登录到ip时出现某种类型的自动登录,否则服务器正在运行?

1 个答案:

答案 0 :(得分:0)

某些命令不需要身份验证。尝试读取或写入集合。

认证本身是通过一系列命令执行的(您可以阅读有关here的信息),因此某些命令必须不一定需要认证。

某些命令根据连接是否经过身份验证返回不同的响应。例如,尝试使用{ismaster:1}进行身份验证和不进行身份验证。