首先确保Linux系统已安装MongoDB Community Server。以CentOS为例,可通过以下命令安装:
sudo yum install mongodb mongodb-server mongodb-devel
安装完成后,启动MongoDB服务并设置开机自启:
sudo systemctl start mongod
sudo systemctl enable mongod
权限管理的核心是启用身份验证,需修改MongoDB配置文件(通常位于/etc/mongod.conf):
sudo nano /etc/mongod.conf
找到security section,添加或修改以下内容:
security:
authorization: enabled
保存文件后,重启MongoDB服务使配置生效:
sudo systemctl restart mongod
为安全起见,首先创建一个管理员用户(拥有root角色,可管理所有数据库的用户和角色):
mongo
在MongoDB shell中执行:
use admin
db.createUser({
user: "admin",
pwd: "StrongAdminPassword123!",
roles: ["root"]
})
exit
注:
root是MongoDB内置的最高权限角色,可管理集群、数据库、用户等所有资源。
根据业务需求,为特定数据库创建用户并分配最小必要权限(遵循“最小权限原则”):
示例1:创建读写权限用户(适用于应用访问数据库)
mongo -u admin -p StrongAdminPassword123 --authenticationDatabase admin
在shell中执行:
use myDatabase // 替换为目标数据库名
db.createUser({
user: "appUser",
pwd: "AppUserPassword456!",
roles: [{ role: "readWrite", db: "myDatabase" }]
})
exit
示例2:创建只读权限用户(适用于报表查询等场景)
use myDatabase
db.createUser({
user: "reportUser",
pwd: "ReportUserPassword789!",
roles: [{ role: "read", db: "myDatabase" }]
})
exit
常用内置角色说明:
| 角色 | 权限范围 | 适用场景 |
|---|---|---|
read |
读取指定数据库的所有数据 | 报表查询、数据分析 |
readWrite |
读写指定数据库的所有数据 | 应用程序日常数据操作 |
dbAdmin |
数据库管理(索引、统计等) | 数据库维护人员 |
userAdmin |
管理指定数据库的用户/角色 | 数据库管理员(仅限该数据库) |
root |
超级权限(所有数据库、集群) | 系统管理员 |
| 更多角色可参考MongoDB官方文档。 |
使用创建的用户连接MongoDB,验证其权限是否生效:
验证读写用户:
mongo -u appUser -p AppUserPassword456 --authenticationDatabase myDatabase
在shell中执行:
use myDatabase
db.mycollection.insert({ name: "test" }) // 测试写入
db.mycollection.find() // 测试读取
exit
验证只读用户:
mongo -u reportUser -p ReportUserPassword789 --authenticationDatabase myDatabase
在shell中执行:
use myDatabase
db.mycollection.find() // 应能读取数据
db.mycollection.insert({ name: "test" }) // 应提示无写入权限
exit
使用TLS/SSL加密连接:在/etc/mongod.conf中配置SSL,防止数据传输被窃听:
net:
ssl:
mode: requireSSL
PEMKeyFile: /path/to/mongodb.pem
CAFile: /path/to/ca.pem
重启服务后,客户端连接需指定SSL参数:
mongo --ssl --sslCAFile /path/to/ca.pem --sslPEMKeyFile /path/to/mongodb.pem -u appUser -p AppUserPassword456 --authenticationDatabase myDatabase
使用防火墙限制访问:通过ufw限制MongoDB端口(默认27017)的访问,仅允许可信IP访问:
sudo ufw allow from 192.168.1.100 to any port 27017
sudo ufw enable
通过以上步骤,可在Linux系统上完成MongoDB的权限管理,确保数据库的安全性和数据的完整性。