源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

MongoDB安全及身份认证(实例讲解)

  • 时间:2022-11-11 19:11 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:MongoDB安全及身份认证(实例讲解)
[b]前面的话[/b] 本文将详细介绍MongoDB安全相关的内容 [b]概述[/b] [b]MongoDB安全主要包括以下4个方面[/b] [b]1、物理隔离[/b] 系统不论设计的多么完善,在实施过程中,总会存在一些漏洞。如果能够把不安全的使用方与MongoDB数据库做物理上的隔离,即通过任何手段都不能连接到数据库,这是最安全的防护。但,通常这是不现实的。一些重要的数据可能会保存下来,放置到物理隔离的机房中 [b]2、网络隔离[/b] 许多公司的开发机处于内网环境中。即使数据库存在漏洞,外部环境也没有机会利用,因为根本无法访问内网 [b]3、防火墙隔离[/b] 可以利用防火墙配置IP白名单,只允许某些IP访问数据库,也可以从一定程度上增加MongoDB的安全性 [b]4、用户名密码鉴权[/b] 相对于以上3种方式,用户名密码鉴权机制是最常见的MongoDB安全措施。如果密码设置的比较简单,或者连接环境不是加密环境,很可能被第三方获取到用户名和密码,从而造成MongoDB数据库的危险 [b]权限认证[/b] mongodb存储所有的用户信息在admin数据库的集合system.users中,保存用户名、密码和数据库信息。mongodb默认不启用权限认证,只要能连接到该服务器,就可连接到mongod。若要启用安全认证,需要更改配置文件参数authorization,也可以简写为auth。
[img]http://files.jb51.net/file_images/article/201707/201707200741492.png[/img]
然后,重启mongod。查看日志文件,发现权限认证已经开启
[img]http://files.jb51.net/file_images/article/201707/201707200741493.png[/img]
但是,不使用用户名和密码依然可以连接到数据库。这是因为,我们还没有创建用户。在用户创建,并且开启权限认证之后,如果不使用用户名和密码将不能够连接到数据库 [b]角色管理[/b] 在进行用户管理之前,首先要先了解角色管理 MongoDB支持基于角色的访问控制(RBAC)来管理对MongoDB系统的访问。一个用户可以被授权一个或者多个:ref:角色 <roles> 以决定该用户对数据库资源和操作的访问权限。在权限以外,用户是无法访问系统的 数据库角色在创建用户中的role参数中设置。角色分为内建角色和自定义角色 [b]【内建角色】[/b] MongoDB内建角色包括以下几类 [b]1、数据库用户角色[/b]
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
[b]2、数据库管理员角色[/b]
dbAdmin:允许用户进行索引创建、删除,查看统计或访问system.profile,但没有角色和用户管理的权限
userAdmin:提供了在当前数据库中创建和修改角色和用户的能力
dbOwner: 提供对数据库执行任何管理操作的能力。这个角色组合了readWrite、dbAdmin和userAdmin角色授予的特权。
[b]3、集群管理角色[/b]
clusterAdmin : 提供最强大的集群管理访问。组合clusterManager、clusterMonitor和hostManager角色的能力。还提供了dropDatabase操作
clusterManager : 在集群上提供管理和监视操作。可以访问配置和本地数据库,这些数据库分别用于分片和复制
clusterMonitor : 提供对监控工具的只读访问,例如MongoDB云管理器和Ops管理器监控代理。
hostManager : 提供监视和管理服务器的能力。
[b]4、备份恢复角色[/b]
backup : 提供备份数据所需的能力,使用MongoDB云管理器备份代理、Ops管理器备份代理或使用mongodump
restore : 提供使用mongorestore恢复数据所需的能力
[b]5、所有数据库角色[/b]
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 
[b]6、超级用户角色[/b]
root:提供对readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin、restore和backup的所有资源的访问
[b]7、内部角色[/b]
__system : 提供对数据库中任何对象的任何操作的特权
[b]【自定义角色】[/b] 除了使用内建的角色之外,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 }
)
[img]http://files.jb51.net/file_images/article/201707/201707200741494.png[/img]
[b]用户管理[/b] [b]【创建用户】[/b] 使用createUser命令来创建用户 user: 用户名 pwd: 密码 customData: 对用户名密码的说明(可选项) roles: {role:继承自什么角色类型,db:数据库名称}
db.createUser({user: "...",pwd: "...",customDate:"...",roles:[{role: "...",db: "..."}]})
[b]1、创建管理员用户[/b] MongoDB没有默认管理员账号,所以要先添加管理员账号。切换到admin数据库,添加的账号才是管理员账号 在admin数据库中,添加一个用户并赋予userAdminAnyDatabase角色
db.createUser({user: "admin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})
[img]http://files.jb51.net/file_images/article/201707/201707200741495.png[/img]  
[b]2、重新登录数据库,并验证权限[/b] 如果auth()方法返回0则代表授权失败,返回1代表授权成功
db.auth()
[img]http://files.jb51.net/file_images/article/201707/201707200741496.png[/img]
[b]3、添加普通用户[/b] 一旦经过认证的用户管理员,可以使用[code]db.createUser()[/code]去创建额外的用户。 可以分配mongodb内置的角色或用户自定义的角色给用户
[img]http://files.jb51.net/file_images/article/201707/201707200741497.png[/img]
[注意]需要在admin数据库下进行认证,否则认证不成功
[img]http://files.jb51.net/file_images/article/201707/201707200741498.png[/img]
由于该用户只有读权限,所以会写入数据失败
[img]http://files.jb51.net/file_images/article/201707/201707200741499.png[/img]
[b]4、创建超级用户[/b]
[img]http://files.jb51.net/file_images/article/201707/2017072007414910.png[/img]
[b]【查看用户】[/b]
db.system.users.find()
[img]http://files.jb51.net/file_images/article/201707/2017072007414911.png[/img] [b]【删除用户】[/b]
db.dropUser()
[img]http://files.jb51.net/file_images/article/201707/2017072007414912.png[/img]
[b]【添加用户权限】[/b]
db.grantRolesToUser()
给在db1数据库中只读的x用户,添加写权限
[img]http://files.jb51.net/file_images/article/201707/2017072007414913.png[/img]
[b]【修改密码】[/b]
db.changeUserPassword()
[img]http://files.jb51.net/file_images/article/201707/2017072007414914.png[/img] 以上这篇MongoDB安全及身份认证(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部