mongodb:如何列出所有身份验证数据库中的所有用户



我对Mongo还很陌生,所以这可能是一个愚蠢的问题,但我还没有找到一种方法来列出所有(身份验证(数据库中的所有用户(及其权限(。同样,我还没有找到列出所有(身份验证(数据库的方法。";显示用户"显示数据库";以及他们的";db.adminCommand(…(版本似乎都是针对当前数据库(使用"use"命令指定的数据库(运行的,但我需要的是所有(!(用户和/或所有(。

我为什么需要这个?嗯,我必须定期为大型用户组设置Mongo帐户,每个用户都有自己的数据库。几个月后,我不得不放弃那些用户和他们的数据库。我有一个Python程序,可以创建/删除这些用户及其数据库。一切似乎都很顺利。当创建一个用户时,我给他们自己的authenticationDatabase(而不是将他们添加到"admin"(,并对该数据库拥有ReadWrite权限。如前所述,所有这些似乎都很有效。然而我需要一种方法来查看程序运行(创建或删除(后,Python程序是否确实创建了用户或删除了数据库。同样,我需要不时地了解所有的用户是谁,以及我可能还有哪些数据库。因此,欢迎使用列出所有(身份验证(数据库中的所有用户以及列出所有身份验证数据库中的全部数据库的命令。希望有人能帮忙(很抱歉阅读太久(。R.

我还没有找到一种方法来列出所有(身份验证(数据库。

我没有找到列出所有内容的方法(身份验证(数据库。

我需要的是所有(!(用户的列表和/或所有(!(数据库,而不考虑这些用户的身份验证数据库。

这里有一种获取您要查找的信息的方法。假设您有读取其他用户信息的权限(viewUser操作(,则可以从mongoshell中查询如下:

> db.getUsers( { usersInfo: { forAllDBs: true } } )

这将返回所有用户和身份验证数据库的数组以及其他相关信息。您对";用户";以及";数据库字段。例如:

[
{
"_id" : "admin.user1",
"userId" : UUID("4f7369f6-bffa-45d9-bbdc-5bf50c196ea3"),
"user" : "user1",
"db" : "admin",
"roles" : [ { "role" : "read", "db" : "test" } ],
"mechanisms" : [ "SCRAM-SHA-1", ... ]
},
{
"_id" : "test.user2",
"userId" : UUID("1e36faaf-0667-4ec5-bbe9-3f703712cd9a"),
"user" : "user2",
"db" : "test",
"roles" : [ { "role" : "readWrite", "db" : "test" } ],
...
},
{
"_id" : "admin.super1",
"userId" : UUID("bcb2f424-7367-4686-82d8-115748fab951"),
"user" : "super1",
"db" : "admin",
"roles" : [ { "role" : "root", "db" : "admin" } ],
...
}
]

由于您需要特定的信息,因此查询被定制如下:

(1(要列出所有身份验证数据库,您可以这样查询:

var dbs = new Set()
db.getUsers( { usersInfo: { forAllDBs: true } } ).forEach(doc => dbs.add(doc.db))
print([...dbs])

输出是唯一身份验证数据库名称的列表:

admin
test

(2(列出所有身份验证数据库和用户:

var dbUsers = [ ]
db.getUsers( { usersInfo: { forAllDBs: true } }  ).forEach(doc => dbUsers.push(doc.db + ", " + doc.user))
dbUsers.sort()
dbUsers.forEach(printjson)

这将获得按身份验证数据库和用户排序的输出:

"admin, user1"
"admin, super1"
"test, user2"

(3(还有其他查询方式。例如,您可以添加一个过滤器来获取具有身份验证数据库的用户";admin":

db.getUsers( { usersInfo: { forAllDBs: true }, filter: { db: "admin" } }  ).forEach(doc => print(doc.user))

这只为";admin":

super1
user1

注意:

有关更多详细信息,请参阅"用户管理"命令usersInfo。mongoshell为该命令提供db.getUser()帮助程序,这在上面的示例中使用。

我尝试使用的服务器版本是MongoDB 4.2版。

据我所知,没有内置的命令可以做到这一点,但实现此功能很简单:

  • 获取数据库列表
  • 对于每个数据库,获取用户列表

最新更新