我的Linode VPS上运行了一个nodejs应用程序,并安装了MongoDB。我无法在同一VPS上连接到数据库,因为它给了我“未经授权”错误。
在VPS上设置数据库和用户
要在我的MongoDB实例上设置数据库,我SSH进入了VPS并进入了mongo shell:
$ mongo
然后我切换到管理数据库,并尝试查看其用户。首先要解决的事情是它不允许我这样做:
use admin
switched to db admin
show users
我得到的错误如下:
2020-05-22T12:13:25.362+0100 E QUERY [js] Error: not authorized on admin to execute command { usersInfo: 1.0,lsid: { id: UUID("bbb18683-839f-4c7d-b453-f774cbc94efd") },$db: "admin" } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.getUsers@src/mongo/shell/db.js:1763:1
shellHelper.show@src/mongo/shell/utils.js:859:9
shellHelper@src/mongo/shell/utils.js:766:15
@(shellhelp2):1:1
我继续在admin数据库中创建一个用户,以便随后可以在我的应用程序数据库中创建一个用户,以使我能够连接到该应用程序的数据库:
db.createUser({user: "superAdmin",pwd: "admin123",roles: [ { role: "root",db: "admin" } ]})
哪个成功:
Successfully added user: {
"user" : "superAdmin","roles" : [
{
"role" : "root","db" : "admin"
}
]
}
因此,我然后重新加载了mongod服务,并使用我刚刚创建的用户登录到Shell:
mongo --port 27017 -u "superAdmin" -p "admin123" --authenticationDatabase "admin"
然后我切换到我的应用程序的数据库,并按以下方式设置用户:
use appDB
switched to db appDB
db.createUser({user: "DBuser",pwd: "DBpassword",roles: ["readWrite"]})
Successfully added user: { "user" : "DBuser","roles" : [ "readWrite" ] }
从相同LINODE上的应用程序与创建的用户访问数据库
在同一linode VPS上的node.js应用程序中,我使用以下连接URI:
'mongodb://DBuser:DBpassword@localhost:27017/appDB'
现在,当我运行种子文件,同时将SSH SSH到VPS中以在VPS上填充数据库时,我得到了未授权的错误:
errmsg:
'not authorized on appDB to execute command { dropDatabase: 1,lsid: { id: UUID("b2c1ffc7-1912-42e3-8f74-ab3726dff3f2") },$db: "appDB" }',code: 13,codeName: 'Unauthorized',
当我尝试使用前端应用程序在数据库中创建新记录时,甚至会发生此错误。
我什至无法通过Insomnia访问VPS上的数据库实例。
这一切都在本地工作,而DB URL中没有(用户名和密码)。
如何正确设置MongoDB实例以接受连接?
任何帮助将不胜感激!
PS-我按照以下说明设置了Linode:https://www.codementor.io/@tomgeraghty/hosting-an-express-server-nodejs-application-with-linode-e1j7wt7mr