温馨提示×

Debian MongoDB权限设置怎么做

小樊
59
2025-09-21 19:38:10
栏目: 云计算

Debian系统下MongoDB权限设置详细步骤

1. 安装MongoDB

首先确保Debian系统已更新,然后通过官方仓库安装MongoDB(以MongoDB 6.0为例):

sudo apt update && sudo apt upgrade -y
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
sudo apt install -y mongodb-org

启动MongoDB服务并设置开机自启:

sudo systemctl start mongod
sudo systemctl enable mongod

2. 启用身份验证

编辑MongoDB配置文件/etc/mongod.conf,在security section下添加或修改以下内容以启用认证:

security:
  authorization: enabled

保存文件后,重启MongoDB服务使配置生效:

sudo systemctl restart mongod

3. 创建管理员用户(超级管理员)

连接到MongoDB shell(默认无认证):

mongo

切换到admin数据库(管理员用户需存放在该数据库):

use admin

创建超级管理员用户(赋予root角色,拥有所有权限):

db.createUser({
  user: "admin",
  pwd: "YourStrongAdminPassword", // 替换为强密码
  roles: ["root"]
})

退出MongoDB shell:

exit

4. 创建数据库用户(普通用户)

4.1 连接到MongoDB(需管理员认证)

使用管理员账户登录MongoDB shell:

mongo -u admin -p YourStrongAdminPassword --authenticationDatabase admin

4.2 切换到目标数据库

假设要为用户创建mydatabase数据库的权限:

use mydatabase

4.3 创建普通用户并分配角色

根据需求分配角色(以下为常见角色组合):

  • 读写权限(适用于应用访问):
    db.createUser({
      user: "appUser",
      pwd: "AppUserPassword", // 替换为强密码
      roles: ["readWrite", "dbAdmin"] // readWrite:读写数据;dbAdmin:管理数据库索引、统计等
    })
    
  • 仅读权限(适用于报表查询):
    db.createUser({
      user: "reportUser",
      pwd: "ReportPassword",
      roles: ["read"]
    })
    
  • 自定义权限(如允许插入但禁止删除):
    db.createUser({
      user: "customUser",
      pwd: "CustomPassword",
      roles: [
        { role: "find", db: "mydatabase" },
        { role: "insert", db: "mydatabase" }
      ]
    })
    

退出MongoDB shell:

exit

5. 验证用户权限

5.1 验证管理员权限

使用管理员账户登录并检查状态:

mongo -u admin -p YourStrongAdminPassword --authenticationDatabase admin
use admin
db.runCommand({ connectionStatus: 1 }) // 查看当前用户权限

5.2 验证普通用户权限

appUser为例,登录并测试操作:

mongo -u appUser -p AppUserPassword --authenticationDatabase mydatabase
use mydatabase
db.testCollection.insertOne({ name: "Test Data" }) // 应成功执行(readWrite权限)
db.testCollection.deleteOne({ name: "Test Data" }) // 应成功执行(readWrite权限)
db.adminCommand({ listDatabases: 1 }) // 应失败(无admin数据库权限)

5.3 验证仅读用户权限

reportUser为例,登录并测试操作:

mongo -u reportUser -p ReportPassword --authenticationDatabase mydatabase
use mydatabase
db.testCollection.find() // 应成功执行(read权限)
db.testCollection.insertOne({ name: "Report Data" }) // 应失败(无write权限)

6. 可选:增强安全性配置

6.1 配置IP白名单

编辑/etc/mongod.conf,限制允许连接的IP地址:

net:
  bindIp: 127.0.0.1,192.168.1.100  # 允许本地和指定IP访问
  port: 27017
security:
  ipWhitelist:
    - 127.0.0.1
    - 192.168.1.100

重启MongoDB服务:

sudo systemctl restart mongod

6.2 启用TLS加密(可选但推荐)

参考MongoDB官方文档配置TLS,加密客户端与服务器之间的通信,防止数据泄露。

注意事项

  • 强密码策略:确保管理员和普通用户使用包含大小写字母、数字和特殊字符的强密码。
  • 最小权限原则:为用户分配完成工作所需的最小权限,避免过度授权。
  • 定期审计:使用MongoDB审计框架(需启用)跟踪用户操作,及时发现异常。
  • 备份管理员账户:妥善保存管理员账户信息,避免丢失后无法恢复数据库访问。

0