如何获取MongoDB中当前帐户的授权数据库列表

时间:2017-02-08 04:43:01

标签: mongodb

我使用的是非管理员帐户来访问Mongo实例。我使用的帐户无权运行show dbs命令。该帐户也没有访问admin数据库的权限。见下面的输出:

show dbs
2017-02-08T15:40:54.651+1100 E QUERY    [main] Error: listDatabases failed:{
    "ok" : 0,
    "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
    "code" : 13,
    "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:755:19
shellHelper@src/mongo/shell/utils.js:645:15
@(shellhelp2):1:1

我徘徊如何获取此帐户有权访问的数据库列表。我知道我可以使用管理员帐户获取所有角色信息。但我没有管理员帐户密码。我只有这个帐户凭证。在这种情况下,我如何为特定帐户执行此操作?

1 个答案:

答案 0 :(得分:0)

与MongoDB 3.4一样,经过身份验证的用户无法查看没有具有listDatabases管理员权限的角色的完整(或部分)可访问数据库列表。

如果您有权访问部署的管理帐户(或者可以请求某人执行此操作),则可以选择创建create a custom role仅授予此权限。但是,这确实可以在共享系统中进行一些潜在的信息泄露,因为listDatabases输出当前包括所有数据库名称以及它们在磁盘上的大小。

例如,创建一个可以列出所有数据库但只具有bobbytableswebscale数据库的读/写权限的用户xkcd

use admin
db.createUser({
    user: "bobbytables",
    pwd:  "drop;mic",
    roles: [
        { role: "readWrite", db: "webscale" },
        { role: "readWrite", db: "xkcd" }
    ]
})
db.createRole({
    role: "listDatabases",
    privileges: [
        { resource: { cluster: true }, actions: [ "listDatabases" ] }
    ],
    roles: []
})
db.grantRolesToUser("bobbytables", ["listDatabases"])

在MongoDB问题跟踪器中有一个相关的开放功能请求可以观看/上传:SERVER-6898: Allow all authenticated users to run listDatabases。建议的更改是允许所有用户运行listDatabases,但将结果列表过滤到当前用户具有读或写权限的数据库。