注册

MongoDB数据库用户角色和权限管理详解

MongoDB数据库用户角色和权限管理详解

MongoDB 是一种极富有弹性的文档型数据库,具有高性能、可伸缩性和可读性等特点。作为 MongoDB 数据库管理员,为保证数据库安全可靠,我们需要了解 MongoDB 的角色和权限管理机制。

MongoDB 用户角色

MongoDB 支持两种类型的角色:内建角色和自定义角色。内建角色是 MongoDB 预定义的一些角色类型,其拥有特定的权限,如下:

内建角色 权限说明
root MongoDB 超级管理员,拥有所有可操作权限
read 只读操作者,拥有读取数据库和集合的权限
readWrite 读写操作者,拥有读取和写入数据库与集合的权限(除了 system 命名下的集合)
userAdmin 用户账户管理员,拥有管理用户账户的权限,但是不能管理角色
dbAdmin 数据库管理员,拥有当前数据库的管理权限,但是不能管理角色
dbOwner 数据库所有者,同时拥有 dbAdmin 和 readWrite 的全部权限

同时,我们也可以通过角色继承的方式,创建自定义的角色。

MongoDB 权限管理

MongoDB 的权限管理是基于角色的。每一个 MongoDB 用户都必须拥有某种角色,以此来授予其具体的操作权限。角色与权限之间的关系如下:

  • 将不同的权限授予在不同的角色上
  • 将一个或者多个角色授予给用户
  • 维护用户的账号、角色及其对应的权限

下面,我们通过两个示例,演示如何创建 MongoDB 用户、角色和授权。

示例1:创建 MongoDB 用户并授权

  1. 连接MongoDB

    shell
    $ mongo

  2. 切换到 admin 数据库

    javascript
    use admin

  3. 创建管理员账户

    javascript
    db.createUser({user:"admin", pwd:"password", roles:["root"]})

  4. 退出 admin 数据库

    javascript
    exit

  5. 以管理员身份登录系统

    shell
    mongo -u admin -p password --authenticationDatabase "admin"

  6. 切换到指定的数据库(demo_db),创建用户名密码并授权

    javascript
    use demo_db
    db.createUser(
    {
    user: "demo_user",
    pwd: "password",
    roles: [ { role: "readWrite", db: "demo_db" } ]
    }
    )

  7. 退出 MongoDB 命令行

    javascript
    exit

上述命令就是创建了一个名为 demo_user 的用户,并授予了其读取和写入 demo_db 数据库的权限。

示例2:以库管理员身份,创建自定义角色并授权

假设我们需要为某个应用创建一个自定义角色,它需要具备对某些集合的读写权限,但是不能对整个数据库或者系统集合操作。

  1. 以管理员身份,切换到指定库(demo_db)

    shell
    mongo -u admin -p password --authenticationDatabase "admin"
    use demo_db

  2. 创建自定义角色

    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 集合的查找权限。

  3. 为指定用户授权自定义角色

    javascript
    db.grantRolesToUser( "demo_user", [ "app_manager" ] )

    可以看到,我们将自定义角色授权给了用户 demo_user。

通过上述两个示例,我们就可以掌握 MongoDB 的用户角色和权限管理的基本操作。在实际应用中,我们可以根据实际需求,创建各种不同的角色和权限,来满足不同应用场景下的具体需求。