Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoDB自定义用户角色-“不允许用户(…)”_Node.js_Mongodb_Mongoose_Connection_Mongodb Atlas - Fatal编程技术网

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

Node.js MongoDB自定义用户角色-“不允许用户(…)”,node.js,mongodb,mongoose,connection,mongodb-atlas,Node.js,Mongodb,Mongoose,Connection,Mongodb Atlas,我在MongoDB Atlas上创建了一个免费层集群,它有3个碎片,我希望我的Node.js应用程序与我在那里创建的数据库连接,使用特定用户,该用户将被限制使用除此应用程序所需的数据库之外的任何其他数据库 所以一步一步 我创建了一个名为test的数据库 我创建了一个角色-我进入安全->MongoDB角色->添加新的自定义角色,我给它所有的收集操作和所有的数据库操作和角色进行测试 用户的时间到了,所以再一次安全->MongoDB用户->添加新用户,我给它分配了一个以前创建的角色,这样它只能访问测试

我在MongoDB Atlas上创建了一个免费层集群,它有3个碎片,我希望我的Node.js应用程序与我在那里创建的数据库连接,使用特定用户,该用户将被限制使用除此应用程序所需的数据库之外的任何其他数据库

所以一步一步

我创建了一个名为test的数据库

我创建了一个角色-我进入安全->MongoDB角色->添加新的自定义角色,我给它所有的收集操作和所有的数据库操作和角色进行测试

用户的时间到了,所以再一次安全->MongoDB用户->添加新用户,我给它分配了一个以前创建的角色,这样它只能访问测试数据库。现在我有2个用户——atlasAdmin和我创建的用户

这就是问题所在,当我在我的应用程序中使用admin user进行连接时,.find或.create一直运行良好。对于具有自定义角色的用户,它的工作时间大约为10分钟/1连接,直到我关闭我的节点应用所在的本地服务器,并且下一次出现不允许用户执行操作的错误

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

然而:

如果我有这个自定义用户,我的应用程序将它连接到数据库,然后在下一个连接上它停止工作,我只需单击“更新用户”,而不在那里更改任何内容。我只需单击用户旁边的“编辑”,然后单击“更新”,然后等待群集进行更改,它将再次工作,例如+/-一个连接

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

有人有类似的问题吗?我也在想,这可能是因为有多少次我尝试从我使用的应用程序nodemon连接mongo,所以每次我保存一个带有更改的文件时,服务器都会重新启动,从而再次连接到数据库,但我认为情况并非如此——如果是这样,为什么我能够让它与管理员用户一起工作

我用于连接mongo的字符串:

//数据库设置 var dbURL='mongodb://[cluster0:port]、[cluster1:port]、[cluster2:port]/test?ssl=true&replicset=cluster0-shard-0&authSource=admin&retryWrites=true'; 变量选项={ useNewUrlParser:true, dbName:test 用户:[登录], 通过:[通过] }; mongoose.connectdbURL,选项;
我在Atlas免费层上也遇到过这个问题,不仅在NodeJS上,在Java上也是如此

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

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

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

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

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


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

我在Atlas免费层上也遇到过这个问题,不仅是在NodeJ上,而且在Java上

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

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

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

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

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


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

最后,一些有用的东西,我厌倦了尝试让它真正工作的失败:D谢谢!为我工作;谢谢:最后,一些有效的东西,我厌倦了我失败的尝试,让它真正起作用:D谢谢!为我工作;谢谢: