如何查看MongoDB用户权限信息?
MongoDB是一种非关系型数据库,它的权限控制机制有很多不同的配置方式,包括集合级别的权限、数据库级别的权限、集群级别的权限等等。所以,了解如何查看用户权限信息对于MongoDB的管理员是非常必要的。
1. 确认是否启用了用户认证(认证模式)
在使用MongoDB时,首先需要确认是否启用了用户认证。通过以下命令查看MongoDB实例中的“security.authorization”参数,确认认证模式的状态:
db.runCommand({getParameter: 1, authenticationMechanisms: 1})
如果认证模式没有启用,那么用户权限的信息是不需要考虑的。在后面的过程中,我们假设已经启用了用户认证模式。
2. 查看用户信息
在MongoDB中,使用“db.system.users”集合存储所有的用户信息。可以通过查询这个集合,查看用户的基本信息和权限控制列表。
通过以下命令查询用户列表:
use admin
db.system.users.find()
可以在返回的结果中看到每个用户的基本信息。比如,下面的结果中,显示了用户“user1”的基本信息。
{ "_id" : "admin.user1", "user" : "user1", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "password_salt", "storedKey" : "password_key" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "dbOwner", "db" : "database1" } ]
这个查询结果中有一些需要注意的信息。比如,“_id”的值是由“db.user”组合而成的,表示在这个数据库中的唯一标识。另外,“roles”键包含了这个用户在不同数据库中的权限配置。
3. 查看角色信息
在MongoDB中,角色是用来控制用户对于不同数据库或者集合的读写权限和管理权限的。和用户一样,所有的角色信息也被存储在系统级别的集合中,即“db.system.roles”。
查询所有的角色列表可以使用以下命令:
use admin
db.system.roles.find()
这个查询结果会显示系统中定义的所有角色及其权限列表。比如下面的结果显示了,系统中定义的两个角色信息。
{ "_id" : "admin", "role" : "root", "db" : "admin", "privileges" : [ { "resource" : { "db" : "", "collection" : "" }, "actions" : [ "anyAction" ] } ], "roles" : [ ] }
{ "_id" : "admin", "role" : "userAdminAnyDatabase", "db" : "admin", "privileges" : [ { "resource" : { "db" : "", "collection" : "" }, "actions" : [ "anyAction" ] } ], "roles" : [ ] }
这个查询结果中,“_id”包含了角色所属的数据库名称,因为同名的角色可以在不同的数据库中进行定义。 “privileges”列出了这个角色所拥有的所有权限,包括集合、索引、和数据库等级别的权限。其中,资源(resource)包含了这个权限的作用范围。
4. 查询用户权限信息
通过了解用户和角色的定义,我们可以查看用户所拥有的权限。这个过程是通过查询用户信息和角色信息来进行的。
比如,我们想查询用户“user1”所在的数据库“database1”中的权限,可以使用以下命令:
use database1
db.runCommand({usersInfo: {user: "user1", db: "database1"}})
执行上述命令后,返回的结果中包含了用户的所有权限信息。例如,下面的结果中,显示了用户“user1”在数据库“database1”中拥有的权限。
{
"users" :
[
{
"_id" : "database1.user1",
"user" : "user1",
"db" : "database1",
"roles" : [
{
"role": "readWrite",
"db" : "database1"
},
{
"role": "dbAdmin",
"db" :"database1"
}
]
}
],
"ok" : 1
}
这个查询结果中有一些需要注意的信息。比如,“roles”指定了用户所拥有的角色,以及这些角色分别赋予了哪些权限。
总结
在MongoDB的权限管理中,用户和角色是拥有所有数据访问权限的最基本的权限组件。用户通过分配角色,来获取角色的权限。如果对于不同的集合或者数据库,存在不同的访问控制需求,可以创建新的角色,或者基于不同的数据库进行用户权限分配。