MongoDB在Ubuntu上的认证方式及配置流程
SCRAM(Salted Challenge-Response Authentication Mechanism)是MongoDB默认的认证机制,Ubuntu环境下主要支持SCRAM-SHA-256(推荐)和SCRAM-SHA-1。配置步骤如下:
编辑MongoDB主配置文件(/etc/mongod.conf),在security section添加或修改以下内容,启用认证功能:
security:
authorization: enabled
保存后重启MongoDB服务使配置生效:
sudo systemctl restart mongod
使用mongo shell连接到MongoDB(默认无认证),切换至admin数据库(系统级权限数据库),创建具备root角色(最高权限)的管理员用户:
use admin
db.createUser({
user: "admin",
pwd: "your_secure_password", // 替换为强密码
roles: ["root"]
})
exit
后续连接MongoDB需通过管理员账户验证,示例如下:
# 命令行连接(本地)
mongo -u admin -p your_secure_password --authenticationDatabase admin
# 图形化工具(如MongoDB Compass)连接字符串示例
mongodb://admin:your_secure_password@localhost:27017/admin
为特定数据库(如mydb)创建普通用户,分配所需权限(如readWrite读写权限、dbOwner数据库所有者权限):
use mydb
db.createUser({
user: "myuser",
pwd: "user_password",
roles: ["readWrite", "dbOwner"]
})
exit
除基础SCRAM认证外,Ubuntu环境还可配置以下高级认证机制,提升安全性:
通过SSL/TLS证书实现客户端与服务端的双向认证,适用于高安全需求场景。配置步骤包括:
openssl工具);/etc/mongod.conf中配置SSL参数:net:
ssl:
mode: requireSSL
PEMKeyFile: /path/to/server.pem # 服务器证书
CAFile: /path/to/ca.pem # CA证书
security:
clusterAuthMode: x509 # 集群内部认证模式
use admin
db.createUser({
user: "certuser",
roles: ["readWrite"],
authenticationRestrictions: [{
clientSource: ["192.168.1.0/24"], // 允许的客户端IP段
serverAddress: ["mongoserver.local"] // 服务器主机名
}]
})
集成企业级LDAP(如OpenLDAP、Active Directory)实现集中用户管理,配置步骤包括:
/etc/mongod.conf中配置LDAP参数:security:
ldap:
servers: ldap://ldap.example.com
bind:
method: simple
queryUser: "cn=admin,dc=example,dc=com"
queryPassword: "ldap_admin_password"
userToDNMapping: '[{"match": "(.+)", "substitution": "cn=$1,ou=users,dc=example,dc=com"}]'
authz:
queryTemplate: "dc=example,dc=com??sub?(memberOf=cn=mongodb-users,ou=groups,dc=example,dc=com)"
mongo -u ldapuser -p ldap_password --authenticationMechanism PLAIN --authenticationDatabase "$external"
db.updateUser()修改现有用户密码。root角色)。net.bindIp限制MongoDB监听IP(如仅绑定127.0.0.1和内网IP),减少暴露风险。security:
auditLog:
destination: file
format: JSON
path: /var/log/mongodb/audit.json
以上配置覆盖了Ubuntu环境下MongoDB的主要认证方式,可根据实际需求选择基础或高级方案,确保数据库访问安全。