全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Mongodb如何开启用户访问控制详解

前言

Mongodb 数据库默认情况下是没有访问控制的,整个数据库对外是开发的,只要能连上数据库,则可以进行任何操作,这会对数据带来很大的风险。当然,我们可以启用mongodb的访问控制,只让通过认证的用户才能对数据库进行角色范围内的操作。

启用访问控制可以通过在启动 mongodb 时指定 --auth 参数来设置,另外还涉及到创建用户 db.createUser 操作以及一些角色的定义,我们先来看这部分内容。

db.createUser() 用法

db.createUser({
 user: "$USERNAME",
 pwd: "$PASSWROD",
 roles: [
 { role: "$ROLE_NAME", db: "$DBNAME"}
 ]
})

参数说明:

  • user 是用户名
  • pwd 是密码
  • role 来指定用户的角色
  • db 来指定所属的数据库
  • roles 是用户所有角色的集合

Mongodb 预定义角色

Mongodb 中预定义了一些角色,把这些角色赋予给适当的用户上,用户就只能进行角色范围内的操作。

1、数据库用户角色 (所有数据库都有)

  • read 用户可以读取当前数据库的数据
  • readWrite 用户可以读写当前数据库的数据

2、数据库管理角色(所有数据库都有)

  1. dbAdmin 管理员用户但不能对用户和角色管理授权
  2. dbOwner 数据库所有者可进行任何管理任务
  3. userAdmin 可以管理当前数据的用户和角色

3、集群管理角色(admin数据库可用)

  1. clusterAdmin 集群所有管理权限,是 clusterManager , clusterMonitor, hostManager 合集
  2. clusterManager 集群管理和监控
  3. clusterMonitor 集群监控,只读的
  4. hostManager 监控和管理服务器

4、备份和恢复角色(admin数据库可用)

  1. backup
  2. restore

5、所有数据库角色(admin数据库可用)

  1. readAnyDatabase 读取所有数据库
  2. readWriteAnyDatabase 读写所有数据库
  3. userAdminAnyDatabase 所有数据库的 userAdmin 权限
  4. dbAdminAnyDatabase 所有数据库的 dbAdmin 权限

6、超级角色(admin数据库可用)

  1. root 超级用户

7、内部角色

  • __system 所有操作权限

更多预定于角色的信息请参看:https://docs.mongodb.com/manual/core/security-built-in-roles/

启用访问控制的步骤

1, 启动 mongodb 实例,关闭 访问控制

不带 --auth

./mongod

2, 连接上 mongodb 实例

./mongo

3,创建用户管理员

在 admin 数据库中添加一个 具有 userAdminAnyDatabase 角色的用户作为用户管理用户。下面的例子中创建了 admin 为用户管理员。

> use admin
switched to db admin
> db.createUser({
... user: "admin",
... pwd: "admin",
... roles: [
... { role: "userAdminAnyDatabase", db: "admin"}
... ]
... })
Successfully added user: {
 "user" : "admin",
 "roles" : [
  {
   "role" : "userAdminAnyDatabase",
   "db" : "admin"
  }
 ]
}
>

退出连接

4,重启数据库启用访问控制

命令行启动,只需要添加 --auth 参数

./mongo --auth

5,使用管理用户连接,有两种方法

  1. 使用命令行 ./mongo -u "$USERNAME" -p "$PASSWROD" --authenticationDatabase "admin"
  2. 使用 db.auth()

我们使用第二种

> 
> use admin
switched to db admin
> db.auth("admin", "admin")
1
>

1 表示认证成功

6, 为某个数据库创建独立用户

以下为 test 数据库 创建具有读写权限的用户 test

admin 用户由于只有 userAdminAnyDatabase 权限,所以没有 test 数据的读写权限,所以,为了读写 test 数据库,我们需要创建一个用户。先看一下直接用 admin 会报什么错误

> use test
> show collections
2017-01-13T13:49:17.691+0800 E QUERY [thread1] Error: listCollections failed: {
"ok" : 0,
"errmsg" : "not authorized on test to execute command { listCollections: 1.0, filter: {} }",
"code" : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype._getCollectionInfosCommand@src/mongo/shell/db.js:773:1
DB.prototype.getCollectionInfos@src/mongo/shell/db.js:785:19
DB.prototype.getCollectionNames@src/mongo/shell/db.js:796:16
shellHelper.show@src/mongo/shell/utils.js:754:9
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1

我们直接使用 show collections , 则报错:not authorized on test to execute command ,意思是没有权限。

> use test
switched to db test
> db.createUser({
... user: "test",
... pwd: "test",
... roles: [
... { role: "readWrite", db: "test"}
... ]
... })
Successfully added user: {
 "user" : "test",
 "roles" : [
  {
   "role" : "readWrite",
   "db" : "test"
  }
 ]
}
>

然后我们使用 db.auth(“test”, “test”) , 再执行命令 则没有报错

> db.auth("test", "test")
1
> 
> show collections

试着写入一条数据,也是正常的。

> db.t.insert({name:"buzheng"});
WriteResult({ "nInserted" : 1 })
> db.t.find();
{ "_id" : ObjectId("58786c84bf5dd606ddfe1144"), "name" : "buzheng" }
>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# mongodb  # 访问控制  # 启用访问控制  # mongodb添加访问控制  # MongoDB 3.0+安全权限访问控制详解  # 分布式文档存储数据库之MongoDB备份与恢复的实践详解  # 分布式文档存储数据库之MongoDB分片集群的问题  # 分布式文档存储数据库之MongoDB访问控制的操作方法  # 都有  # 用户可以  # 报错  # 会报  # 命令行  # 我们可以  # 这部  # 可以通过  # 只需要  # 这篇文章  # 有两种  # 涉及到  # 不带  # 则可  # 试着  # 重启  # 但不  # 能对  # 合集 


相关文章: IOS倒计时设置UIButton标题title的抖动问题  如何通过cPanel快速搭建网站?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  c# 在高并发场景下,委托和接口调用的性能对比  Swift中switch语句区间和元组模式匹配  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何将凡科建站内容保存为本地文件?  微信小程序 五星评分(包括半颗星评分)实例代码  官网建站费用明细查询_企业建站套餐价格及收费标准指南  建站之星如何防范黑客攻击与数据泄露?  怎么将XML数据可视化 D3.js加载XML  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  焦点电影公司作品,电影焦点结局是什么?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  如何快速选择适合个人网站的云服务器配置?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  建站主机如何选?性能与价格怎样平衡?  python的本地网站制作,如何创建本地站点?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  一键网站制作软件,义乌购一件代发流程?  建站主机选虚拟主机还是云服务器更好?  移民网站制作流程,怎么看加拿大移民官网?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  如何快速搭建支持数据库操作的智能建站平台?  如何通过多用户协作模板快速搭建高效企业网站?  深圳网站制作平台,深圳市做网站好的公司有哪些?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  已有域名和空间,如何快速搭建网站?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  C++如何使用std::optional?(处理可选值)  如何在阿里云虚拟主机上快速搭建个人网站?  网站制作公司排行榜,四大门户网站排名?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  如何选择域名并搭建高效网站?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  如何在阿里云购买域名并搭建网站?  C++时间戳转换成日期时间的步骤和示例代码  C#怎么使用委托和事件 C# delegate与event编程方法  深圳网站制作培训,深圳哪些招聘网站比较好?  如何通过可视化优化提升建站效果?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  如何通过NAT技术实现内网高效建站?  建站10G流量真的够用吗?如何应对访问高峰?  如何快速生成ASP一键建站模板并优化安全性?  实例解析angularjs的filter过滤器  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何用西部建站助手快速创建专业网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。