MongoDB采用基于角色的访问控制(RBAC)机制,通过用户、角色、权限的组合实现细粒度权限管理。核心要素包括:
readWrite、dbAdmin)和自定义角色;find、insert、update)。权限管理的前提是启用认证并限制网络访问,避免未授权连接。
编辑MongoDB配置文件(/etc/mongod.conf),在security部分添加以下配置:
security:
authorization: enabled
保存后重启MongoDB服务使配置生效:
sudo systemctl restart mongod
在/etc/mongod.conf的net部分,设置bindIp为允许连接的IP地址(如本地127.0.0.1和特定IP192.168.1.100):
net:
bindIp: 127.0.0.1,192.168.1.100 # 允许本地和指定IP连接
port: 27017 # 默认端口
重启MongoDB服务:
sudo systemctl restart mongod
为管理MongoDB用户(如创建、修改、删除用户),需在admin数据库创建管理员用户,并分配用户管理角色。
mongo
admin数据库use admin
例如,创建名为adminUser的用户,密码为StrongPass123,分配userAdminAnyDatabase(管理所有数据库用户)和readWriteAnyDatabase(读写所有数据库)角色:
db.createUser({
user: "adminUser",
pwd: "StrongPass123",
roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"]
})
执行后返回Successfully added user表示创建成功。
为特定数据库创建普通用户,分配最小必要权限(遵循最小权限原则)。
例如,为目标数据库myDatabase创建用户:
use myDatabase
例如,创建名为myUser的用户,密码为UserPass456,分配readWrite(读写数据)角色:
db.createUser({
user: "myUser",
pwd: "UserPass456",
roles: [{ role: "readWrite", db: "myDatabase" }]
})
若需为用户添加多个角色(如同时拥有readWrite和dbAdmin),可使用数组:
db.createUser({
user: "myUser",
pwd: "UserPass456",
roles: [
{ role: "readWrite", db: "myDatabase" },
{ role: "dbAdmin", db: "myDatabase" }
]
})
使用db.auth()命令验证用户身份及权限:
// 切换到目标数据库
use myDatabase
// 验证用户(返回1表示成功)
db.auth("myUser", "UserPass456")
若需为用户添加或移除权限,可使用db.grantRolesToUser()(添加)或db.revokeRolesFromUser()(移除)命令。
例如,为用户myUser添加read(读取数据)角色:
use myDatabase
db.grantRolesToUser("myUser", [{ role: "read", db: "myDatabase" }])
移除read角色:
db.revokeRolesFromUser("myUser", [{ role: "read", db: "myDatabase" }])
若需删除用户,可使用db.dropUser()命令:
use myDatabase
db.dropUser("myUser")
执行后返回true表示删除成功。
若需记录用户操作(如登录、查询、修改数据),可启用MongoDB审计日志功能。
编辑/etc/mongod.conf,在security部分添加以下配置:
security:
auditLog:
destination: file
format: JSON
path: /var/log/mongodb/audit.json
保存后重启MongoDB服务:
sudo systemctl restart mongod
审计日志将保存到/var/log/mongodb/audit.json,可用于追踪用户操作。
通过以上步骤,可在Ubuntu上实现MongoDB的完整权限管理,确保数据库访问的安全性和可控性。