最近在玩koa2,涉及到连接mongodb,中间踩的坑挺多,mongodb默认是没有用户验证登录的,但是为了让我们的数据库更加安全,还是要把用户权限这一块加上滴。废话不多说,现在开启我们的验证之旅:
我的mongodb是通过brew install mongod
安装的,所以按默认配置启动服务mongod --config /usr/local/etc/mongod.conf
,此命令不是挂起的,所以我们另开窗口执行mongo
,连接到admin库,在admin库添加超级用户:
Eugene-mac:~ Eugene$ mongo
MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.3
Server has startup warnings:
2017-04-27T17:19:15.356+0800 I CONTROL [initandlisten]
2017-04-27T17:19:15.356+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-04-27T17:19:15.356+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-04-27T17:19:15.356+0800 I CONTROL [initandlisten]
> show dbs
admin 0.000GB
local 0.000GB
test 0.000GB
> use admin
switched to db admin
> db.createUser({
user: 'admin',
pwd: 'admin',
roles: [ { role: "__system", db: "admin" } ]
})
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "__system",
"db" : "admin"
}
]
}
>
这样,超级用户就建成了,通过这个用户可以对任何库进行任何超做。但是利用这个超级用户来连接数据库显然是不安全的,所以我们可以对每个库进行权限配置。接下来就来配置其他库的用户权限,比如现在有一个test测试库,我配置一个读写权限的用户:
> use admin
switched to db admin
> db.createUser({
user: 'testUser',
pwd: 'testPwd',
roles: [ { role: 'readWrite', db: 'test'} ]
})
Successfully added user: {
"user" : "testUser",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
}
]
}
这样,这个用户名为testUser密码为testPwd的用户就建成了,如果我们用工具mongoose直连mongodb的话也是很方便的。
mongoose.connect('mongodb://testUser:testPwd@localhost:27017/test', {
auth: {
authdb: 'admin'
}
}, function(err){
if (err) {
console.error(err);
} else {
cosnole.log('连接数据库成功')
}
});
以上是连接test库的方式,如果要使用之前建的超级用户来访问test库的话,只要修改url中的账号和密码就行啦。(注意一定要访问的时候要对admin库验证,即authdb: 'admin'
)。
网友评论