博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB安全权限设置及密码重置方法
阅读量:4163 次
发布时间:2019-05-26

本文共 2745 字,大约阅读时间需要 9 分钟。

文章目录

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

    db.auth("admin","123456")use maohwdb.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 admindb.system.users.find().pretty()
  3. 修改某用户的密码

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

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

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

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

use admindb.system.users.remove({
}) # 删除所有帐户

转载地址:http://zkpxi.baihongyu.com/

你可能感兴趣的文章
2011十大战略技术
查看>>
大学应该学的软件知识
查看>>
腾讯与360战争背后的云计算阴影
查看>>
腾讯看了会沉默,360看了会流泪
查看>>
李开复:移动互联网机会最大 微博会现最大赢家
查看>>
2006年的IT十大战略技术
查看>>
操作系统介绍
查看>>
Desktop Linux: The Dream Is Dead
查看>>
我的9年IT路
查看>>
任正非:让用户像用电一样享受云计算
查看>>
学习技术的几个境界
查看>>
计算机世界:免费的代价
查看>>
方兴东:中国网站十年
查看>>
2010年微软和谷歌十大战场:从桌面到浏览器
查看>>
服务器虚拟化的未来之路
查看>>
写给我们这些浮躁的系统工程师
查看>>
和平分手?你根本不知道吴恩达在百度经历了什么
查看>>
业余研究:关于腾讯与他的QQ帝国
查看>>
马云校长湖畔大学第三期讲义完整版
查看>>
iPhone为什么比Android好
查看>>