Mongodb如何設置沒有
如何設置沒有 admin
數據庫訪問權限但將其用作身份驗證數據庫的使用者?
我想在 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" ])
更新
讓我們使用 –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>