MongoDB 验证登录
1 用户(管理员)管理
添加管理员
use admin; //管理员 只能 添加到 admin 数据库下
db.createUser(
{
user: "adminUser",
pwd: "adminPass",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
添加普通用户
use dbName; //所有数据库下 都可以添加普通用户
db.createUser(
{
user: "simpleUser",
pwd: "simplePass",
roles: [ { role: "readWrite", db: "foo" },
{ role: "read", db: "bar" } ]
}
)
过程类似创建管理员账户,只是 role 有所不同
一点需要注意,如果 admin 库没有任何用户的话,即使在其他数据库中创建了用户,启用身份验证,默认的连接方式依然会有超级权限
角色
- read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
- userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
- root:只在admin数据库中可用。超级账号,超级权限
用户操作
//查找指定用户
db.getUser(username)
//查找全部用户
db.getUsers();
show users;
//修改用户
db.updateUser(
"<username>",
{
roles : [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
pwd: "<cleartext password>"
}
)
//修改用户密码
db.changeUserPassword(username, password)
//删除用户
db.dropUser(username);
2 验证登陆
第一种方式,连接mongoDB服务器后再验证
mongo
db.auth(user, pwd)
第二种方式, 连接的时候指定用户名密码
mongo -u username -p pwd host:port/dbName
启动带访问控制的MongoDB服务器
mongod --auth --config ...
3 MongoDB 安全问题
- 暴露在公网上的MongoDB服务器 https://www.shodan.io/report/h0bgF6zM