我们有一个带有NodeJs 8.11.3的EC2 MongoDb 4.0.1实例,当我尝试访问远程MongoDb时,我得到了TimeOutError
。
var url = "mongodb://admin:pw@xxx-xx-xxx-xx-x.eu-central-1.compute.amazonaws.com:27017";
MongoClient.connect(url, (err, database) => {
if (err) return console.log(err);
db = database.db(dbName);
app.listen(3000, function() {
console.log("listen 3000");
})
});
我已经设置了管理员,注释了bind_ip
文件中的mongo.conf
字段,并为安全组中的27017端口设置了入站规则。
然后我想通过"mongodb://admin:pw@127.0.0.1:27017"
在本地连接
我收到“无法连接到服务器...”错误。
任何建议以及如何解决?
答案 0 :(得分:2)
您尚未指定数据库,请替换
"mongodb://admin:pw@127.0.0.1:27017"
作者
"mongodb://admin:pw@127.0.0.1:27017/myDatabaseName"
此外,如果您使用用户名和密码,则必须具有一个身份验证数据库,必须在您的连接行中使用 authSource 指定该数据库:
我假设您的身份验证数据库名称为“ admin”
"mongodb://admin:pw@127.0.0.1:27017/myDatabaseName?authSource=admin"
如果您的所有信息正确无误,您必须能够使用以下命令将Shell直接连接到您的身份验证数据库:
mongo admin -u admin -p pw --host 127.0.0.1 --port 27017
使用以下命令访问数据库:
mongo myDatabaseName -u admin -p pw --host 127.0.0.1 --port 27017
使用用户和密码连接到远程数据库的标准过程如下:
在您的EC2服务器上:
首先,确保您的27017端口已打开。
连接您的外壳
$ mongo --port 27017
创建管理员用户myAdmin,密码为Test1234:
> db.createUser({user: "myAdmin", pwd: "Test1234", roles:[{role: "userAdminAnyDatabase", db: "admin"}]})
从mongo注销
对mongod.config文件启用身份验证并禁用本地绑定:
security:
authorization: enabled
# bindIp: 127.0.0.1
重启mongod:
sudo service mongod restart
您必须能够执行以下操作:
与进行连接时进行身份验证:
mongo --port 27017 -u "myAdmin" -p "Test1234" --authenticationDatabase "admin"
或连接然后进行身份验证:
mongo --port 27017
> use admin
switched to db admin
> db.auth("myAdmin", "Test1234")
然后,您必须能够创建用户,首先以admin身份验证:
mongo --port 27017 -u "myAdmin" -p "Test1234" --authenticationDatabase "admin"
然后为数据库“ myDb”创建用户myUser,其密码为Abcd1234。
db.createUser({user: "myUser", pwd: "Abcd1234", roles:[{role: "readWrite", db: "myDb"}]})
那么您必须能够与myDb数据库上的新用户本地连接
mongo myDb --port 27017 -u "myUser" -p "Abcd1234" --authenticationDatabase "admin"
然后确认没有身份验证就不能使用mongo:
mongo myDb --port 27017
> show collections
"ok" : 0,
"errmsg" : "not authorized on myDb to execute command { listCollections: 1.0, filter: {} }",
"code" : 13
您现在可以尝试远程连接:
在您的本地shell上,只需将主机添加到您的连接线即可:
mongo myDb --port 27017 -u "myUser" -p "Abcd1234" --authenticationDatabase "admin" --host 164.X.X.X
在nodejs上,您只需要向连接线添加这些参数即可:
"mongodb://myUser:Abcd1234@164.X.X.X:27017/myDb?authSource=admin"