我使用以下命令集创建一个用户.这将在admin db和我的目标db(c2d)中创建用户:

# mongo 127.0.0.1:27017
MongoDB shell version: 3.2.6-29-g5c19788
connecting to: 127.0.0.1:27017/test
> use admin
switched to db admin
> show collections
system.users
system.version
> db.system.users.find()
> db.createUser({user:"cd2", pwd:"cd2", roles:[{role:"dbOwner", db: "c2d"}]})
Successfully added user: {
    "user" : "cd2",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "c2d"
        }
    ]
}
> db.system.users.find()
{ "_id" : "admin.cd2", "user" : "cd2", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "4g6t9kC+godz7k6QQOfD+A==", "storedKey" : "m3tDZBQDU2Tlb1lIjLGyTHmr2QQ=", "serverKey" : "GSA4OXSod1s8mBuZBtfmXq2tlTo=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] }
> use c2d
switched to db c2d
> db.createUser({user:"cd2", pwd:"cd2", roles:[{role:"dbOwner", db: "c2d"}]})
Successfully added user: {
    "user" : "cd2",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "c2d"
        }
    ]
}
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "admin.cd2", "user" : "cd2", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "4g6t9kC+godz7k6QQOfD+A==", "storedKey" : "m3tDZBQDU2Tlb1lIjLGyTHmr2QQ=", "serverKey" : "GSA4OXSod1s8mBuZBtfmXq2tlTo=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] }
{ "_id" : "c2d.cd2", "user" : "cd2", "db" : "c2d", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "vnMjnjfykVQS8ujQXeWaYw==", "storedKey" : "OYXivkmIwuTavlwTGfjrspT6j2E=", "serverKey" : "lw8xqzAaW8V4IQ9wOmQrG2VSp88=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] }

如果我try 登录,会收到一条错误消息:

# mongo 127.0.0.1:27017/c2d -u c2d -p c2d
MongoDB shell version: 3.2.6-29-g5c19788
connecting to: 127.0.0.1:27017/c2d
2016-05-22T10:35:41.862+0100 E QUERY    [thread1] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1441:20
@(auth):6:1
@(auth):1:2

exception: login failed

然后我在conf文件中启用安全功能并重新启动服务器:

security:
  authorization: enabled

错误仍然是一样的:

# mongo 127.0.0.1:27017/c2d -u c2d -p c2d
MongoDB shell version: 3.2.6-29-g5c19788
connecting to: 127.0.0.1:27017/c2d
2016-05-22T10:37:43.713+0100 E QUERY    [thread1] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1441:20
@(auth):6:1
@(auth):1:2

exception: login failed

推荐答案

好吧,您需要按顺序采取两个步骤才能成功创建用户.

首先,您需要创建一个管理员用户.我更喜欢创建超级用户.

> use admin
> db.createUser({user: "root", pwd: "123456", roles:["root"]})

重新启动MongoDB服务器,并使用--auth标志启用身份验证.

> mongod --auth --port 27017 --dbpath /var/lib/mongodb

服务器启动后,以管理员身份连接到服务器

> mongo <host:port> -u "root" -p "123456" --authenticationDatabase "admin"

连接后,创建普通用户.假设您的数据库用户名为cd2.

> use cd2
> db.createUser({user: "cd2", pwd: "cd2", roles:["dbOwner"]})

如果您看到成功消息,请断开与mongo shell的连接并重新连接新用户

> mongo <host:port>/cd2 -u "cd2" -p "cd2"

Mongodb相关问答推荐

Mongodb如果数组中有外部键,则将排序应用到查找结果

MongoDB:就地分组嵌套数组的元素

如何在MongoSH中的现有文档中插入字段

Next js、MongoDB和Prisma.包括不为相关字段工作

从 Amazon S3(Next.js、Mongodb、Mongoose)删除图像

从MongoDB迁移到PostgreSQL:为PostgreSQL编写聚合管道查询

使用Go的Mongo驱动程序,从MongoDB文档中获取元素并更新其值需要帮助

更新值导致错误 Golang MongoDB

Mongodb,在一个查询中用正则表达式更新部分字符串

@DynamicPropertySource 未被调用(Kotlin、Spring Boot 和 TestContainers)

Meteor mongo 驱动程序可以处理 $each 和 $position 运算符吗?

如何知道 MongoDB 集合大小?

ExpressJS & Mongoose REST API struct :最佳实践?

如何将 mongoDB 数据导出为 CSV 格式?

Mongodb 类型引用 node

MongoDB的数据库管理工具

未找到 MongoDB 数据/数据库

我可以使用字符串作为 mongodb 文档的 ID 类型吗?

Hadoop Map/Reduce 与内置 Map/Reduce

如何从集合中删除除 MongoDB 中的文档之外的所有文档