如何在 MongoDB 上设置连接身份验证?

iva*_*ncz 3 mongodb

使用 mongo Shell 或任何其他类型的客户端时如何配置 MongoDB 身份验证?

iva*_*ncz 5

这是一个完整的解决方案,包括创建“超级用户”,能够访问任何资源并执行任何操作。


注意

  • 第一:首次访问 MongoDB 时无需身份验证 ( $ mongo)。

  • 第二: MongoDB的配置文件可能会有所不同,具体取决于您使用的版本(3.x:mongod.conf / 2.x:mongodb.conf)


创建用户

> use admin
switched to db admin
> db.createUser( {user:"mongo", pwd:"mongo", roles:["root"]} )
Successfully added user: { "user" : "mongo", "roles" : [ "root" ] }
Run Code Online (Sandbox Code Playgroud)

验证用户创建和身份验证

> db.getUser("mongo")
{
    "_id" : "admin.mongo",
    "user" : "mongo",
    "db" : "admin",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}

> db.auth("mongo","mongo")
1
Run Code Online (Sandbox Code Playgroud)

启用身份验证

检查哪个配置文件正在使用 MongoDB

$ ps aux | grep mongo
mongodb  12583  0.5  3.4 2381948 281140 ?  Sl  18:34  0:06 /usr/bin/mongod --config /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)

MongoDB 3.x

$ grep -A 1 security /etc/mongod.conf 
security:
   authorization: enabled
Run Code Online (Sandbox Code Playgroud)

MongoDB 2.x

$ grep -B 2 auth=True /etc/mongodb.conf
# Turn on/off security.  Off is currently the default
#noauth = true
auth=True
Run Code Online (Sandbox Code Playgroud)

重新启动 MongoDB(SysV 脚本)

$ /etc/init.d/mongodb restart
Run Code Online (Sandbox Code Playgroud)

通过 Mongo Shell 连接

$ mongo -u mongo -p --authenticationDatabase admin
MongoDB shell version v3.4.3
Enter password: ********** 
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.3
> show dbs
admin     0.078GB
android   0.078GB
blog      0.078GB
games     0.078GB
school    0.078GB
Run Code Online (Sandbox Code Playgroud)

注意:您只需点击mongo并打开 Mongo Shell,但它不会让您执行任何操作,因为您之前未经身份验证。

$ mongo
MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.3
> show dbs
2017-10-03T19:04:55.953+0000 E QUERY    [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" : 13,
"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1
> 
Run Code Online (Sandbox Code Playgroud)

对于删除用户:

> use admin
> db.dropUser("myuser")
Run Code Online (Sandbox Code Playgroud)

参考: