mongodb - 如何在我的 Linode VPS 上访问我的 MongoDB?
问题描述
我在我的 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 上的应用程序中使用创建的用户访问数据库
在我的 node.js 应用程序中,它位于同一个 linode VPS 上,我使用以下连接 URI:
'mongodb://DBuser:DBpassword@localhost:27017/appDB'
现在,当我运行种子文件,同时通过 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
解决方案
您为用户提供了readWrite角色,但该角色不允许执行命令dropDatabase,只有dbAdmin角色可以执行此操作。在此处查看可用的内置角色:https ://docs.mongodb.com/manual/reference/built-in-roles/
理想情况下,您应该为自己创建一个具有所有必要权限的自定义角色,并将该角色分配给应用程序的用户。此处有关用户定义角色的更多信息:https ://docs.mongodb.com/manual/core/security-user-defined-roles/
推荐阅读
- laravel - 如何在 Laravel 查询生成器中计算“位置”匹配记录
- reactjs - 需要部署一个与 rasa 模型集成的 React Web 应用程序
- r - Shint:如何显示在 for 循环中更新的文本?
- python-3.x - 时间序列分解:ValueError: You must specify a period or x must be a pandas object with a DatetimeIndex with a freq not set to None
- javascript - 反应中的对象克隆
- python - PyOpenCl 无效的内核参数
- java - 返回的文件不为空,但在下次调用时为空
- node.js - 我需要为路由过程编写单元测试吗?
- c - 检查是否定义了多行宏
- mysql - 我在哪里可以找到存储过程的输出?