如何在我的 Linode VPS 上访问我的 MongoDB?

How can I access my MongoDB on my Linode VPS?

我在我的 Linode VPS 上安装了一个 nodejs 应用 运行ning,安装了 MongoDB。我无法在同一个 VPS 上连接到数据库,因为它给我 'Unauthorised' 错误。

在 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

我继续在管理数据库中创建一个用户,这样我就可以在我的应用程序数据库中创建一个用户,使我能够连接到应用程序的数据库:

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 上的数据库实例。

这一切都在本地工作,数据库中没有(用户名和密码)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/