1. MongoDB用户授权简介
MongoDB提供了许多授权方式,开发人员可以根据需要来选择合适的授权方式。MongoDB用户授权主要分为角色授权和细粒度授权。
1.1 角色授权
角色授权是MongoDB中最常用的授权方式,通常用于授权给用户拥有某一类权限。MongoDB内部定义了一系列预设角色,例如read、readWrite、dbAdmin、dbOwner等,可以将这些角色赋予不同的用户。
1.2 细粒度授权
细粒度授权允许用户通过特定的细节来授权,例如指定特定的集合或特定的操作。MongoDB中最常用的细粒度授权方式是使用用户定义的角色。
2. 创建授权用户
在MongoDB中创建授权用户可以使用如下的命令:
use admin
db.createUser(
{
user: "admin",
pwd: "password",
roles: [ { role: "root", db: "admin" } ]
}
)
这个命令会在admin数据库中创建用户admin,并授予这个用户在admin数据库中拥有root角色的权限。root角色是MongoDB内置的超级管理员角色,拥有访问所有数据库的权限。
如果想要创建一个不是超级管理员的用户,可以使用其他的角色。例如,创建一个只能读取test数据库数据的用户:
use admin
db.createUser(
{
user: "user",
pwd: "password",
roles: [ { role: "read", db: "test" } ]
}
)
这个命令会在admin数据库中创建一个名为user的用户,这个用户只能读取test数据库中的数据。
3. 查看授权用户
可以使用如下命令来查看MongoDB中的授权用户:
use admin
show users
这个命令会显示所有当前MongoDB实例中的用户。如果要查看特定数据库的用户信息,先进入目标数据库再执行show users。
4. 修改授权用户
可以使用updateUser命令来修改MongoDB中的授权用户。例如,将某一用户的密码更改为newpassword:
use admin
db.updateUser("admin", { pwd: "newpassword" })
这个命令会将用户admin的密码修改为newpassword。
5. 删除授权用户
完成某一用户的使用后,可以使用dropUser命令删除MongoDB中的授权用户。例如,删除用户admin:
use admin
db.dropUser("admin")
执行这个命令将会删除用户admin及其对应的角色和权限。删除用户时需要注意,确认该用户在所有数据库中的权限都已移除。
6. 设置角色权限
通过创建用户并赋予角色,MongoDB用户授权就完成了。通过修改角色的定义,可以自定义用户的权限级别。
例如,想要修改read角色,使其可以读取所有集合的数据:
use admin
db.updateRole(
"read",
{ privileges: [
{ resource: { db: "", collection: "" }, actions: [ "find" ] }
],
roles: []
}
)
这个命令将read角色的权限扩展到了所有的集合中。
7. 细粒度授权
细粒度授权可以让用户只能访问特定的数据或执行特定的操作。例如,可以使用以下命令授予一名用户访问某一集合的权限:
use test
db.createRole(
{
role: "collectionReader",
privileges: [
{
resource: {
db: "test",
collection: "example_collection"
},
actions: [ "find" ]
}
],
roles: []
}
)
db.createUser(
{
user: "user",
pwd: "password",
roles: [ { role: "collectionReader", db: "test" } ]
}
)
这个命令先创建了一个名为collectionReader的角色,并给它授予了在test数据库的example_collection集合上执行find操作的权限。然后,使用createUser命令创建了一个名为user的用户,并将collectionReader角色赋予该用户,使得该用户只能够从example_collection集合中读取数据。
8. 总结
本文介绍了MongoDB中的用户授权。通过创建、更新和删除用户,可以对MongoDB实例进行权限管理。通过定义角色和权限,可以灵活控制用户对数据库中数据的访问。细粒度的授权机制可以进一步提高安全性和灵活性。