MongoDB安全权限设置及密码重置方法

RBAC(基于角色控制)

MongoDB中的权限是基于角色控制的(Role-Based Access Control)

角色类型类型说明角色名称说明
数据库一般角色(Database User Roles)每个数据库都包含的一般角色read提供读取所有非系统集合和部分系统集合的数据的能力,系统集合包括:system.indexes,system.js和system.namespaces集合
readWrite提供read角色的所有权限以及修改所有非系统集合和system.js集合上的数据的能力
数据库管理角色(Database Administration Roles)每个数据库都包含的数据库管理角色dbAdmin提供执行管理任务的能力,如与模式相关的任务,索引,收集统计信息。 此角色不授予用户和角色管理的权限
userAdmin提供在当前数据库上创建和修改角色和用户的能力
dbOwner提供对数据库执行任何管理操作的能力。 此角色结合了readWrite,dbAdmin和userAdmin角色授予的权限
集群管理角色(Cluster Administration Roles)用于管理整个数据库集群系统而不是特定数据库的角色。 这些角色包括但不限于副本集和分片群集管理功能clusterManager在集群上提供管理和监视操作。 具有此角色的用户可以分别访问在分片和复制中使用的config和local数据库
clusterMonitor为监控工具(如MongoDB Cloud Manager和Ops Manager监控代理)提供只读访问权限
hostManager提供监视和管理服务器的能力
clusterAdmin提供权限最高的群集管理访问。 此角色结合了由clusterManager,clusterMonitor和hostManager角色授予的权限。 此外,该角色还提供了dropDatabase操作
备份和恢复角色(Backup and Restoration Roles)用于专门的备份和恢复的角色backup提供备份数据所需的权限。 此角色提供足够的权限来使用MongoDB Cloud Manager备份代理,Ops Manager备份代理或使用mongodump
restore提供使用mongorestore恢复数据所需的权限
全数据库角色(All-Database Roles)适用于除mongod实例中的local和config之外的所有数据库readAnyDatabase提供与读取相同的只读权限,除了适用于群集中除本地和配置数据库以外的所有权限。 该角色还提供了整个集群上的listDatabases操作
readWriteAnyDatabase提供与readWrite相同的读取和写入权限,除了它适用于群集中除本地和配置数据库以外的所有数据。 该角色还提供了整个集群上的listDatabases操作
userAdminAnyDatabase提供与userAdmin相同的用户管理操作访问权限,除了适用于群集中除本地数据库和配置数据库外的所有数据
dbAdminAnyDatabase提供与dbAdmin相同的数据库管理操作访问权限,除了它适用于除集群中的本地数据库和配置数据库以外的所有数据库管理操作。 该角色还提供了整个集群上的listDatabases操作
超级角色(Superuser Roles)所有资源的完整权限root提供对readWriteAnyDatabase,dbAdminAnyDatabase,userAdminAnyDatabase,clusterAdmin,还原和备份相结合的操作和所有资源的访问

设置权限

  1. 关闭mongodb,指定安全模式启动

    /usr/bin/mongod -f /etc/mongod.conf --auth
    

    说明:

    • 数据库增加安全模式后,虽然允许连接到客户端,但其他操作都是没有权限执行的
    • 如果是yum方式安装的,可以直接修改/etc/mongodb.conf中的配置项auth=true,然后重启systemctl restart mongod
  2. 数据库增加安全模式后,初始化一个"userAdminAnyDatabase"极其重要,通过客户端连接,切换到admin数据库,创建权限用户admin:

    mongo 127.0.0.1:27017
    
    use admin
    
    db.createUser({'user':'admin', 'pwd':'123456', 'roles':[{'role':'userAdminAnyDatabase', 'db':'admin'}]})
    
  3. 使用admin用户登录,切换到目标库,然后使用admin为这个库创建可读写的用户maohw

    db.auth("admin","123456")
    
    use maohw
    
    db.createUser({'user':'maohw','pwd':'123456','roles':[{'role':'readWrite','db':'maohw'}]})
    
  4. 使用maohw用户登录,测试读写操作

    db.auth("maohw","123456")
    

忘掉密码怎么办

  1. 强制关闭mongodb,然后使用非安全模式启动

    /usr/bin/mongod -f /etc/mongod.conf
    

    说明:

    如果是yum方式安装的,可以直接修改/etc/mongodb.conf中的配置项auth=false,然后重启mongo:systemctl restart mongod

  2. 切换到admin库,然后会发现所创建的用户是在 system.users集合里的,查看该集合看看有哪些用户

    use admin
    
    db.system.users.find().pretty()
    
  3. 修改某用户的密码

    db.changeUserPassword('user','password')
    

    修改完毕后再以安全模式重启mongodb

除此之外,还有一种比较极端的修改用户密码方式,这里并不推荐,方法如下:

以非安全模式启动mongo,然后切换到admin库,将system.users集合里的用户全部删除,然后重新创建新用户,创建完毕后再以安全模式启动(注意:这种方式必须删除全部用户,如果只删除某一个用户然后再创建该用户,亲测是不可以的!!!)

use admin

db.system.users.remove({})     # 删除所有帐户
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值