ubuntu

MongoDB在Ubuntu上的权限管理怎么做

小樊
38
2025-09-23 10:41:20
栏目: 云计算

MongoDB在Ubuntu上的权限管理指南

一、权限管理前置准备

在Ubuntu上进行MongoDB权限管理前,需完成以下基础步骤:

  1. 安装MongoDB:通过Ubuntu官方仓库或MongoDB官方仓库安装最新稳定版(如MongoDB 6.0+),确保服务可正常启动。
  2. 启动MongoDB服务:使用sudo systemctl start mongod启动服务,通过sudo systemctl status mongod确认服务状态为“active (running)”。

二、启用MongoDB身份验证

权限管理的核心是启用访问控制,需修改MongoDB配置文件并重启服务:

  1. 编辑配置文件:打开/etc/mongod.conf,找到security section,添加或修改以下内容:
    security:
      authorization: enabled
    
  2. 重启服务生效:保存配置后,执行sudo systemctl restart mongod使身份验证生效。

三、创建管理员用户(管理数据库用户)

管理员用户用于管理所有数据库的用户和权限,需在admin数据库中创建:

  1. 连接MongoDB Shell:使用mongo命令进入交互式Shell。
  2. 切换至admin数据库:执行use admin
  3. 创建管理员用户:通过db.createUser()创建具备用户管理权限的用户(如adminUser),示例:
    db.createUser({
      user: "adminUser",
      pwd: "StrongAdminPassword123!",
      roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"]
    })
    
    • userAdminAnyDatabase:允许管理所有数据库的用户账户。
    • readWriteAnyDatabase:允许对所有数据库进行读写操作(可选,根据需求调整)。

四、创建数据库用户并分配权限

为目标数据库创建专用用户,并分配最小必要权限(遵循最小权限原则):

  1. 以管理员身份连接:使用管理员用户登录,例如:
    mongo -u adminUser -p StrongAdminPassword123 --authenticationDatabase admin
    
  2. 切换至目标数据库:执行use myDatabase(将myDatabase替换为实际数据库名)。
  3. 创建数据库用户并分配角色:通过db.createUser()创建用户(如myUser),并分配对应角色,示例:
    • 基础读写权限(适合应用连接):
      db.createUser({
        user: "myUser",
        pwd: "AppUserPassword456!",
        roles: ["readWrite"]
      })
      
    • 高级管理权限(适合数据库管理员):
      db.createUser({
        user: "dbAdmin",
        pwd: "DBAdminPassword789!",
        roles: ["dbOwner"]
      })
      
    • 自定义权限组合(如读写+索引管理):
      db.grantRolesToUser("myUser", [
        { role: "readWrite", db: "myDatabase" },
        { role: "dbAdmin", db: "myDatabase" }
      ])
      
    常见内置角色说明:
    • read:仅读取数据。
    • readWrite:读取+写入数据。
    • dbOwner:数据库所有者(包含readWritedbAdmin等权限)。
    • userAdmin:管理当前数据库的用户和角色。

五、验证用户权限

使用创建的用户连接MongoDB,验证权限是否生效:

  1. 普通用户连接
    mongo -u myUser -p AppUserPassword456 --authenticationDatabase myDatabase
    
  2. 测试权限
    • 执行show dbs:若用户无listDatabases权限,仅显示当前数据库。
    • 执行db.collection.insert({name: "test"}):若用户有readWrite权限,可成功插入数据;否则报错“unauthorized”。

六、权限管理进阶操作

  1. 修改用户密码:使用db.changeUserPassword(),例如:
    use admin
    db.changeUserPassword("adminUser", "NewStrongPassword123!")
    
  2. 删除用户:使用db.dropUser(),例如:
    use myDatabase
    db.dropUser("myUser")
    
  3. 查看用户权限:使用db.getUser(),例如:
    use myDatabase
    db.getUser("myUser")
    
  4. 限制IP访问:修改/etc/mongod.conf中的net.bindIp,仅允许特定IP访问(如本地和公司IP):
    net:
      port: 27017
      bindIp: 127.0.0.1,192.168.1.100
    
    重启服务后生效:sudo systemctl restart mongod

注意事项

0
看了该问题的人还看了