MongoDB 自定义用户角色 - “不允许用户(...)”

wis*_*nia 1 connection mongoose mongodb node.js mongodb-atlas

我在 MongoDB Atlas 上创建了一个免费层集群(它有 3 个分片),我希望我的 Node.js 应用程序连接到我在那里创建的数据库,使用特定用户,该数据库将被限制使用任何其他数据库而不是指定的数据库对于这个应用程序。

所以一步一步来。

我创建了一个名为的数据库,比方说,test.

我创建角色这里-我去Security -> MongoDB Roles -> Add New Custom Role,我放下一切Collection actions和所有Database actions and rolestest

用户的时间,所以Security -> MongoDB Users -> Add New User我再次为它分配一个以前创建的角色,因此它只能访问test数据库。所以现在我有 2 个用户 - atlasAdmin 和我创建的用户。

这就是问题发生的地方,当我在我的应用程序中使用管理员用户进行连接时,.find()或者.create()它一直工作正常。对于具有自定义角色的用户,它的工作时间为 10 分钟/1 次连接(直到我关闭了我的节点应用程序打开的本地服务器),并且下次我收到“不允许用户执行操作(.. .)”。

我尝试了一切,修改我用来连接的字符串,更新mongoose(我在我的应用程序中使用它),使用 mongodb shell 创建用户和自定义角色,但似乎没有任何效果。

然而:

  • 如果我有这个自定义用户,我的应用程序将它连接到数据库并且它可以工作,然后在下一个连接时它停止工作,我去这里点击UPDATE USER而不改变那里的任何东西(我只是点击edit用户旁边然后update)然后等待集群进行更改,它将再次为 +/- 一个连接工作。

  • 如果我的应用程序使用管理员帐户,一切正常

有人遇到过类似的问题吗?错误的屏幕截图我还认为这可能是因为我尝试从应用程序连接 mongo 的次数(我nodemon每次保存带有更改的文件时都会使用它,服务器重新启动,从而再次连接到数据库)但我认为事实并非如此-如果是这样,为什么我能够使其与管理员用户一起使用?

我用来连接 mongo 的字符串:

// DATABASE SETUP
var dbURL = 'mongodb://[cluster0:port],[cluster1:port],[cluster2:port]/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true';
var options = {
    useNewUrlParser: true,
    dbName: "test"
    user: [login],
    pass: [pass]
};
mongoose.connect(dbURL, options);
Run Code Online (Sandbox Code Playgroud)

meo*_*eow 6

我也在 Atlas Free 层上遇到过这个问题,不仅在 NodeJS 上,在 Java 上也是如此

现在,您可以尝试通过使用默认角色而不是自定义角色来缓解此问题

在 MongoDB 用户选项卡上,在您的用户上单击“编辑”=> 添加默认权限

图片1

然后选择“readWrite”并在第一个字段中键入您的数据库名称,然后保存用户

图2

或者,如果您需要数据库管理,请添加另一个具有“dbAdmin”角色的字段

图3

至少我是这样解决的。我希望这有帮助。

旁注:您也可以使用较短的连接字符串 (MongoDB+SRV),它仍然可以工作。