我使用非管理员帐户访问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
我不知道如何获取此帐户可以访问的数据库列表。我知道我可以使用管理员帐户来获取所有角色的信息。但我没有管理员帐户密码。我只有这个帐户凭据。在这种情况下,我如何为特定帐户执行此操作?
与MongoDB 3.4一样,如果没有具有listDatabases
管理员权限的角色,经过身份验证的用户不可能查看可访问数据库的完整(或部分)列表。
如果您有权访问部署的管理帐户(或者可以向有此权限的人提出请求),一种选择是创建一个仅授予此权限的自定义角色。然而,由于listDatabases
输出当前包括所有数据库名称及其在磁盘上的大小,因此这确实允许在共享系统中公开一些潜在的信息。
例如,要创建一个用户bobbytables
,该用户可以列出所有数据库,但只能对webscale
和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问题跟踪器中有一个相关的开放功能请求需要监视/upovote:SERVER-6898:允许所有经过身份验证的用户运行listDatabases。建议的更改是允许所有用户运行listDatabases
,但将结果列表过滤到当前用户具有读或写权限的数据库中。