MongoDB用户管理

本文介绍了MongoDB的用户管理,包括添加管理员、普通用户和超级管理员,以及启用验证、查看、修改和删除用户。同时,详细阐述了MongoDB的主从备份机制,包括复制的作用、特性、创建与管理,以及自动故障转移的过程,强调了数据安全性和高可用性的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MongoDB用户管理

用户管理
  • MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
  • 切换到admin数据库,添加的账号才是管理员账号。
  • 用户只能在用户所在数据库登录,包括管理员账号。
  • 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。
角色分类
角色分类角色名称
数据库用户角色read、readWrite
数据库管理角色dbAdmin、dbOwner、userAdmin
集群管理角色clusterAdmin、clusterManager clusterMonitor、hostManager
备份恢复角色backup、restore
所有数据库角色readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色root,这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色__system
角色分类
角色名称权限作用
Read允许用户读取指定数据库
readWrite允许用户读写指定数据库
dbAdmin允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabas只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
root只在admin数据库中可用。超级账号,超级权限
添加用户
  • 添加普通用户
db.createUser({
    user:"test1",
    pwd:"123456",
    customData:{                      #这是注释信息
        name:'jim',
        email:'jim@qq.com',
        age:18,
    },
    roles:[
        {role:"readWrite",db:"mydb1"},
        {role:"readWrite",db:"mydb2"},
        'read'
    ]
})
  • 添加管理用户
db.createUser(
   {
     user: "root",
     pwd: "123456",
     customData:{description:"superuser"},
     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
   }
)
  • 添加超级管理员
db.createUser(
    {
        user:"root",
        pwd:"123456",
        roles:["root"]
    }
)
启用验证
vi /etc/mongodb.conf
security:
  authorization: enabled
查看用户
show users
db.system.users.find()
db.runCommand({usersInfo:"userName"})
修改用户密码
db.changeUserPassword("root", "123qwe")
修改用户密码和信息
db.runCommand(
    {
        updateUser:"root",
        pwd:"123456",
        customData:{title:"super"}
    }
)
删除用户
db.system.users.deleteOne({user:"test1"})

MongoDB主从备份

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。mongodb各个节点常见的搭配方式为:一主一从、一主多从。主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

复制的作用
  • 保障数据的安全性
  • 数据高可用性
  • 灾难恢复
  • 无需停机维护(如备份,重建索引,压缩)
  • 分布式读取数据
复制的特性
  • N个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复
创建数据库存放的目录
mkdir -p /data/{mongo1,mongo2,mongo3}/{data,log}
启动数据库
mongod --dbpath /data/mongo1/data --port 10001 --replSet test --nojournal --fork --logpath /data/mongo1/log/mongo1.log
mongod --dbpath /data/mongo2/data --port 10002 --replSet test --nojournal --fork --logpath /data/mongo2/log/mongo2.log
mongod --dbpath /data/mongo3/data --port 10003 --replSet test --nojournal --fork --logpath /data/mongo1/log/mongo3.log

#### 连接数据库

mongo 127.0.0.1:10001
mongo 127.0.0.1:10002
mongo 127.0.0.1:10003
初始化数据库
rs.initiate({_id:"test",members:[
{_id:1,host:"127.0.0.1:10001"},
{_id:2,host:"127.0.0.1:10002"},
{_id:3,host:"127.0.0.1:10003"},
]})
查询数据库状态
rs.status()
添加数据库文档测试
use alice

db.jack.insertOne({
    name:"wangwu",
    age:24
})
从主节点读取
mongo 127.0.0.1:1002

rs.slaveOK()

use alice

db.jack.find().pretty()
移除/添加节点
rs.remove('ip:port')
例如:
	rs.remove('127.0.0.1:10001')
	
rs.add('ip:port')
例如:
	rs.remove('127.0.0.1:10001')

## 自动故障转移

  • 连接数据库
mongo 127.0.0.1:10001
  • 关闭主数据库
use admin

db.shutdownServer()
或者
ps aux | grep mongodb

kill 进程号
  • 连接其他数据库
mongo 127.0.0.1:10002
  • 查询状态
rs.status()
  • 重新启动数据库
mongod --dbpath /data/mongo1/data --port 10001 --replSet test --nojournal --fork --logpath /data/mongo1/log/mongo1.log
总结:数据库只能有一个主,可以有很多个从;数据库只能在主里面进行增删改查,从只能查看;如果主出现故障,其中一个从会变成主接着工作;当原来的主恢复后,原有的主就会恢复之前的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值