MongoDB-未经授权执行命令

时间:2019-01-03 16:49:53

标签: mongodb shell authentication roles createuser

我已经在MongoDB上成功启用了授权,并且已经在管理数据库上创建了一个帐户,然后为我的数据库创建了一个名为test的帐户。以下连接字符串可以成功连接到我的测试数据库:mongo --host 192.168.17.52 --port 27017 -u user1 -p password --authenticationDatabase test

我现在唯一的问题是,我无法执行以下命令:show dbs。尝试这样做时出现以下错误:

"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, lsid: { id: UUID(\"a1d5bc0d-bc58-485e-b232-270758a89455\") }, $db: \"admin\" }"

我在许多在线资源中都可以帮助解决此问题,但是没有运气,有什么办法可以解决此问题?似乎我的用户无法访问管理数据库,是否可以向我的用户授予此访问权限,以便我可以运行诸如show dbs之类的必要命令?

非常感谢您的帮助! :)

2 个答案:

答案 0 :(得分:0)

问题与您正在使用的带有--authenticationDatabase参数的数据库有关。

您正在与没有执行listDatabase命令特权的测试数据库用户连接到mongo。

让我们使用管理数据库作为身份验证数据库

mongo --host 192.168.17.52 --port 27017 -u user1 -p password --authenticationDatabase admin

然后运行命令

show dbs

答案 1 :(得分:0)

为了运行show dbs命令,并且如果用户有权访问多个数据库,则首先应在admin数据库上创建用户(这是因为listDatabases操作是集群广泛的操作)。另外,应该授予用户访问此操作的权限。为此,应在操作中创建一个新角色。以下是相同的步骤:

//以admin身份以--authenticationDatabase "admin"登录(假设admin用户具有root特权),然后运行以下命令:

use admin;

db.runCommand({ createRole: "listDatabases", privileges: [{ resource: { cluster : true }, actions: ["listDatabases"]} ], roles: [] });

db.createUser({user:"testUser", pwd:"passwd", roles:[{role:"read", db:"db1"},{role:"read", db:"db2"},{ role: "listDatabases", db: "admin" }]});

//以管理员用户身份退出并以testUser身份登录:请注意--authenticationDatabase "admin"

mongo -u "testUser" -p --authenticationDatabase "admin"

登录后,运行以下命令,它应列出所有数据库:

show dbs;

即使未授予用户访问admin数据库的权限,以下内容也可以正常工作:

use admin;

但是下面的内容将给出错误:

show collections;