簡體   English   中英

MongoDB 自定義用戶角色 - “不允許用戶(...)”

[英]MongoDB custom user roles - "user is not allowed(...)"

我在 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);

我在 Atlas Free tier 上也遇到過這個問題,不僅在 NodeJS 上,在 Java 上也是如此

現在,您可以嘗試使用默認角色而不是自定義角色來緩解此問題

在 MongoDB 用戶選項卡上,單擊用戶的“編輯”=> 添加默認權限

圖片1

然后選擇“readWrite”並在第一個字段中鍵入您的數據庫名稱,然后保存用戶

圖二

或者,如果您想要數據庫管理,請添加另一個具有“dbAdmin”角色的字段

圖3

至少我是這樣解決的。 我希望這有幫助。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM