Mongodb

如何設置沒有 admin 數據庫訪問權限但將其用作身份驗證數據庫的使用者?

  • September 11, 2017

我想在 MongoDB 中設置一個使用者。此使用者將沒有管理員數據庫訪問權限。但它使用 admin 作為身份驗證數據庫。此命令將無法連接 mongoDB mongo --host localhost admin。相反,它可以使用此命令連接到test數據庫:mongo --host localhost --authenticationDatabases admin test. 在這種情況下如何限制權限?

我嘗試了以下命令來創建使用者:

db.createUser({user: 'testUser', pwd: '123456', roles: [{role:'readWrite', db: 'SampleCollections'}]})

當我使用該使用者帳戶登錄 mongo shell 時,我可以列出admin數據庫下的集合。我怎樣才能將使用者限制在SampleCollections數據庫上而不是admin

不需要。您只需向使用者授予所需的非管理員數據庫所需的權限。即使使用者沒有對管理數據庫的讀/寫訪問權限,使用者也可以使用管理數據庫作為身份驗證數據庫。

use products
db.grantRolesToUser("productsUser",[ "readWrite" ])

grantRolesToUser文件。

更新

讓我們使用 –auth 創建 mongodb 實例。以管理員身份登錄,創建只能讀寫 test -db 的使用者,使用該使用者進行身份驗證,檢查可以使用列表管理員數據庫集合以及該使用者可以使用測試數據庫做什麼。

#> mlaunch init --single --auth
launching: mongod on port 27017
Username "user", password "password"
#> mongo -u user -p password admin
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017/admin
MongoDB server version: 3.4.6
Mongo> db.createUser({user:"test", pwd:"testpwd", roles:[{role:"readWrite", db:"test"}]})
Successfully added user: {
   "user" : "test",
   "roles" : [
       {
           "role" : "readWrite",
           "db" : "test"
       }
   ]
}
Mongo> db.auth("test","testpwd")
1
Mongo> db
admin
Mongo> show collections
2017-09-11T19:06:22.001+0300 E QUERY    [thread1] Error: listCollections failed: {
   "ok" : 0,
   "errmsg" : "not authorized on admin to execute command { listCollections: 1.0, filter: {} }",
   "code" : 13,
   "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype._getCollectionInfosCommand@src/mongo/shell/db.js:807:1
DB.prototype.getCollectionInfos@src/mongo/shell/db.js:819:19
DB.prototype.getCollectionNames@src/mongo/shell/db.js:830:16
shellHelper.show@src/mongo/shell/utils.js:762:9
shellHelper@src/mongo/shell/utils.js:659:15
@(shellhelp2):1:1
Mongo> use test
switched to db test
Mongo> db.coll.insert({})
WriteResult({ "nInserted" : 1 })
Mongo> show collections
coll
Mongo>  

和外面一樣:

#> mongo -u test -p testpwd --authenticationDatabase test
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.6
2017-09-11T19:17:48.614+0300 E QUERY    [thread1] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1461:20
@(auth):6:1
@(auth):1:2
exception: login failed
#> mongo -u test -p testpwd --authenticationDatabase admin test
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017/test
MongoDB server version: 3.4.6
Mongo> 

引用自:https://dba.stackexchange.com/questions/185518