设为首页 收藏本站
查看: 1802|回复: 0

[经验分享] MongoDB安全及身份认证

[复制链接]

尚未签到

发表于 2018-10-25 08:21:58 | 显示全部楼层 |阅读模式
概述
  MongoDB安全主要包括以下4个方面
  1、物理隔离
  系统不论设计的多么完善,在实施过程中,总会存在一些漏洞。如果能够把不安全的使用方与MongoDB数据库做物理上的隔离,即通过任何手段都不能连接到数据库,这是最安全的防护。但,通常这是不现实的。一些重要的数据可能会保存下来,放置到物理隔离的机房中
  2、网络隔离
  许多公司的开发机处于内网环境中。即使数据库存在漏洞,外部环境也没有机会利用,因为根本无法访问内网
  3、防火墙隔离
  可以利用防火墙配置IP白名单,只允许某些IP访问数据库,也可以从一定程度上增加MongoDB的安全性
  4、用户名密码鉴权
  相对于以上3种方式,用户名密码鉴权机制是最常见的MongoDB安全措施。如果密码设置的比较简单,或者连接环境不是加密环境,很可能被第三方获取到用户名和密码,从而造成MongoDB数据库的危险
权限认证
  mongodb存储所有的用户信息在admin数据库的集合system.users中,保存用户名、密码和数据库信息。mongodb默认不启用权限认证,只要能连接到该服务器,就可连接到mongod。若要启用安全认证,需要更改配置文件参数authorization,也可以简写为auth。

  然后,重启mongod。查看日志文件,发现权限认证已经开启

  但是,不使用用户名和密码依然可以连接到数据库。这是因为,我们还没有创建用户。在用户创建,并且开启权限认证之后,如果不使用用户名和密码将不能够连接到数据库
角色管理
  在进行用户管理之前,首先要先了解角色管理
  MongoDB支持基于角色的访问控制(RBAC)来管理对MongoDB系统的访问。一个用户可以被授权一个或者多个:ref:角色  以决定该用户对数据库资源和操作的访问权限。在权限以外,用户是无法访问系统的
  数据库角色在创建用户中的role参数中设置。角色分为内建角色和自定义角色
  【内建角色】
  MongoDB内建角色包括以下几类
  1、数据库用户角色
read:允许用户读取指定数据库  
readWrite:允许用户读写指定数据库
  2、数据库管理员角色
dbAdmin:允许用户进行索引创建、删除,查看统计或访问system.profile,但没有角色和用户管理的权限  
userAdmin:提供了在当前数据库中创建和修改角色和用户的能力
  dbOwner: 提供对数据库执行任何管理操作的能力。这个角色组合了readWrite、dbAdmin和userAdmin角色授予的特权。
  3、集群管理角色
clusterAdmin : 提供最强大的集群管理访问。组合clusterManager、clusterMonitor和hostManager角色的能力。还提供了dropDatabase操作  
clusterManager : 在集群上提供管理和监视操作。可以访问配置和本地数据库,这些数据库分别用于分片和复制clusterMonitor : 提供对监控工具的只读访问,例如MongoDB云管理器和Ops管理器监控代理。
  
hostManager : 提供监视和管理服务器的能力。
  4、备份恢复角色
backup : 提供备份数据所需的能力,使用MongoDB云管理器备份代理、Ops管理器备份代理或使用mongodump  
restore : 提供使用mongorestore恢复数据所需的能力
  5、所有数据库角色
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限  
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  6、超级用户角色
root:提供对readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin、restore和backup的所有资源的访问  7、内部角色
__system : 提供对数据库中任何对象的任何操作的特权  【自定义角色】
  除了使用内建的角色之外,MongoDB还支持使用db.createRole()方法来自定义角色
  [注意]只能在admin数据库中创建角色,否则会失败
  role: 自定义角色的名称
  privileges: 权限操作 
  roles:继承的角色。如果没有继承的角色,可以设置为空数组  

use admin  
db.createRole(
  
   {
  
     role: "myClusterwideAdmin",
  
     privileges: [
  
       { resource: { cluster: true }, actions: [ "addShard" ] },
  
       { resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] },
  
       { resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] },
  
       { resource: { db: "", collection: "" }, actions: [ "find" ] }
  
     ],
  
     roles: [
  
       { role: "read", db: "admin" }
  
     ]
  
   },
  
   { w: "majority" , wtimeout: 5000 }
  
)


用户管理
  【创建用户】
  使用createUser命令来创建用户
  user: 用户名  pwd: 密码
  customData: 对用户名密码的说明(可选项)
  roles: {role:继承自什么角色类型,db:数据库名称}
db.createUser({user: "...",pwd: "...",customDate:"...",roles:[{role: "...",db: "..."}]})  1、创建管理员用户
  MongoDB没有默认管理员账号,所以要先添加管理员账号。切换到admin数据库,添加的账号才是管理员账号
  在admin数据库中,添加一个用户并赋予userAdminAnyDatabase角色
db.createUser({user: "admin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})

  2、重新登录数据库,并验证权限
  如果auth()方法返回0则代表授权失败,返回1代表授权成功
db.auth()

  3、添加普通用户
  一旦经过认证的用户管理员,可以使用db.createUser()去创建额外的用户。 可以分配mongodb内置的角色或用户自定义的角色给用户

  [注意]需要在admin数据库下进行认证,否则认证不成功

  由于该用户只有读权限,所以会写入数据失败

  4、创建超级用户

  【查看用户】
db.system.users.find()

  【删除用户】
db.dropUser()

  【添加用户权限】
db.grantRolesToUser()  给在db1数据库中只读的x用户,添加写权限

  【修改密码】
db.changeUserPassword()




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626126-1-1.html 上篇帖子: MongoDB数据库聚合 下篇帖子: mongodb复制集配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表