MongoDB数据库用户角色和权限管理详解
MongoDB 是一种极富有弹性的文档型数据库,具有高性能、可伸缩性和可读性等特点。作为 MongoDB 数据库管理员,为保证数据库安全可靠,我们需要了解 MongoDB 的角色和权限管理机制。
MongoDB 用户角色
MongoDB 支持两种类型的角色:内建角色和自定义角色。内建角色是 MongoDB 预定义的一些角色类型,其拥有特定的权限,如下:
内建角色 | 权限说明 |
---|---|
root | MongoDB 超级管理员,拥有所有可操作权限 |
read | 只读操作者,拥有读取数据库和集合的权限 |
readWrite | 读写操作者,拥有读取和写入数据库与集合的权限(除了 system 命名下的集合) |
userAdmin | 用户账户管理员,拥有管理用户账户的权限,但是不能管理角色 |
dbAdmin | 数据库管理员,拥有当前数据库的管理权限,但是不能管理角色 |
dbOwner | 数据库所有者,同时拥有 dbAdmin 和 readWrite 的全部权限 |
同时,我们也可以通过角色继承的方式,创建自定义的角色。
MongoDB 权限管理
MongoDB 的权限管理是基于角色的。每一个 MongoDB 用户都必须拥有某种角色,以此来授予其具体的操作权限。角色与权限之间的关系如下:
- 将不同的权限授予在不同的角色上
- 将一个或者多个角色授予给用户
- 维护用户的账号、角色及其对应的权限
下面,我们通过两个示例,演示如何创建 MongoDB 用户、角色和授权。
示例1:创建 MongoDB 用户并授权
-
连接MongoDB
shell
$ mongo -
切换到 admin 数据库
javascript
use admin -
创建管理员账户
javascript
db.createUser({user:"admin", pwd:"password", roles:["root"]}) -
退出 admin 数据库
javascript
exit -
以管理员身份登录系统
shell
mongo -u admin -p password --authenticationDatabase "admin" -
切换到指定的数据库(demo_db),创建用户名密码并授权
javascript
use demo_db
db.createUser(
{
user: "demo_user",
pwd: "password",
roles: [ { role: "readWrite", db: "demo_db" } ]
}
) -
退出 MongoDB 命令行
javascript
exit
上述命令就是创建了一个名为 demo_user 的用户,并授予了其读取和写入 demo_db 数据库的权限。
示例2:以库管理员身份,创建自定义角色并授权
假设我们需要为某个应用创建一个自定义角色,它需要具备对某些集合的读写权限,但是不能对整个数据库或者系统集合操作。
-
以管理员身份,切换到指定库(demo_db)
shell
mongo -u admin -p password --authenticationDatabase "admin"
use demo_db -
创建自定义角色
javascript
db.createRole(
{
role: "app_manager",
privileges: [
{ resource: { db: "demo_db", collection: "users" }, actions: [ "find", "insert", "update", "remove" ] },
{ resource: { db: "demo_db", collection: "settings" }, actions: [ "find" ] }
],
roles: []
}
)在上述命令中,我们创建了一个名为 app_manager 的自定义角色,它拥有对 demo_db 数据库中 users 集合的插入、更新、删除和查找权限,同时还拥有对 settings 集合的查找权限。
-
为指定用户授权自定义角色
javascript
db.grantRolesToUser( "demo_user", [ "app_manager" ] )可以看到,我们将自定义角色授权给了用户 demo_user。
通过上述两个示例,我们就可以掌握 MongoDB 的用户角色和权限管理的基本操作。在实际应用中,我们可以根据实际需求,创建各种不同的角色和权限,来满足不同应用场景下的具体需求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MongoDB数据库用户角色和权限管理详解 - Python技术站