我在MongoDB Atlas(具有3个分片)上创建了一个免费层集群,并且我希望我的Node.js应用程序使用特定用户连接到在那里创建的数据库,该数据库将被禁止使用除这个应用程式专用的。
所以一步一步来
我创建了一个名为test
的数据库。
我创建了一个角色here-我去了Security -> MongoDB Roles -> Add New Custom Role
,并将所有Collection actions
和所有Database actions and roles
都交给了test
用户的时间,因此,Security -> MongoDB Users -> Add New User
再一次给我分配了一个先前创建的角色,因此它只能访问test
数据库。所以现在我有2个用户-atlasAdmin和我创建的用户。
问题出在哪里,当我在应用中使用管理员用户连接.find()
或.create()
时,它一直可以正常工作。对于具有自定义角色的用户,它的工作方式类似于10分钟/ 1连接(直到关闭我已打开节点应用程序的本地服务器),下一次出现错误消息“不允许用户执行操作(。 )”。
我尝试了一切,修改了用于连接的字符串,更新了mongoose
(我在应用程序中使用了它),使用mongodb shell创建了用户和自定义角色,但似乎无济于事。
但是:
如果我有这个自定义用户,我的应用程序将其连接到数据库并且可以正常工作,然后在下一个连接上它停止工作,我进入here,然后单击UPDATE USER
,而没有更改那里的任何内容(我只需单击用户旁边的edit
,然后单击update
),然后等待集群进行更改,它将再次工作,例如+/-一个连接。
如果我的应用使用管理员帐户,一切都可以正常工作
有人有类似的问题吗? Screenshot of the error我也在想,这可能是因为我尝试从应用程序连接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);
答案 0 :(得分:0)