专栏首页arebirth重生者的IT之路MongoDB系列---用户及权限管理02

MongoDB系列---用户及权限管理02

知识回顾:

   本系列上一篇博文我们讲述了如何搭建环境以及配置我们的MongoDB,通过搭建环境后我们又学习了如何通过简单的命令和配置来启动关闭我们的MongoDB。

一 用户及权限管理

前言:

  MongoDB 作为时下最为热门的数据库,那么其安全验证也是必不可少的,否则一个没有验证的数据库暴露出去,任何人可随意操作,这将是非常危险的。我们可以通过使用为MongoDB 创建用户的方式来降低风险

1 MongoDB用户权限列表

2 MongoDB用户使用

2.1 创建DB管理用户

mongodb 有一个用户管理机制,简单描述为,有一个管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。管理员通常没有数据库的读写权限,只有操作用户的权限, 因此我们只需要赋予管理员userAdminAnyDatabase 角色即可。另外管理员账户必须在 admin 数据库下创建,3.0 版本后没有 admin 数据库,但我们可以手动 use 一个。注:use 命令在切换数据库时,如果切换到一个不存在的数据库,MongodDB会自动创建该数据库

2.1.1 切换到Admin库   管理员需要再admin数据库下面创建,所以我们需要切换到admin数据库(3.0版本后没有这个数据库,但是我们使用use admin 会自动为我们创建这个数据库)

2.1.2 查看admin中的用户 我们可以通过 db.system.users.find()函数来查看 admin 库中的所有用户信息。

目前再admin库中没有用户,所以查无结果 2.1.3 db.createUser 函数 再MongoDB中我们可以用db.createUser({用户信息})函数创建用户 db.createUser({ user: "<name>", pwd: "<cleartext password>", customData: { <any information> }, roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ] }); 1)user:新建用户名 2)pwd:新建用户密码 3)customData:存放一些用户相关的自定义数据,我们一般省略该属性。 4)roles:数组类型,配置用户的权限 2.1.4 创建管理员用户 我们现在需要在 admin 库中创建一个名为 test的管理员用户,密码为 test,并为其赋予userAdminAnyDatabase权限(忘了权限可以看看上面的图片介绍),并通过'db'参数指定了它所对应的admin库 db.createUser({user:'test',pwd:'test',roles:[{role:'userAdminAnyDatabase',db:'admin'}]}) 创建成功后我们可以看到如下提示:

接着我们用db.system.users.find()命令来查看我们创建的用户信息(要首先进入admin数据库下再使用这条命令!)

如果正确输入命令后没有查看到新创建的角色信息,那么我们需要重启MongoDB,然后再去查看(重启就是关闭MongoDB服务,然后开启MongoDB,忘记的可以看我们系列的上一篇博文) 就此我们创建角色并赋予了个简单的权限就已经ok了。


2.1.6 使用权限方式启动MongoDB 再默认情况下MongoDB是不开启用户认证的。如果我们添加用户,那么需要开启用户认证机制。通过修改mongodb.conf配置文件,再文件中添加auth=true即可(上篇博文配置的基础上) 改完后是这个样子。

然后重启我们的MongoDB服务(就是关闭再重新开启!) 5.1.7 用户认证 由于我们刚刚设置了以权限的方式启动MongoDB,那么我们再进入系统的话就不能直接操作了,需要进行认证! 如果我们没认证直接操作命令(可以进行use 数据库)会报错,没有权限

所以我们需要输入认证函数 格式: db.auth('user','pwd') 例如用我们刚刚创建的test账户 db.auth('test','test') 切记:   我们需要首先进入我们该用户所对应的数据库,否则就会像下面第一条命令这样,

0 代表 失败 1 代表登录成功

2.2 创建普通用户

普通用户由管理员创建。通常需要指定某个数据库来操作

2.2.1 需求   我们创建一个名为day的数据库,给这个数据库添加一个用户,用户名为day,密码为day。并授予该用户对day数据库进行读写操作的权限 2.2.2 使用管理员用户登录 (如果还保持刚刚test账户的状态,那么可以跳过此步骤) 普通用户需要由管理员创建并授权。所以,我们首先做的就是用管理员账户登录数据库。

2.2.3 创建day数据库 use命令进行切换的时候,如果库不存在则自动创建该数据库 use day

2.2.4 创建普通用户 根据我们上方的需求来创建。 db.createUser({user:'day',pwd:'day',roles:[{role:'readWrite',db:'day'}]})

2.2.5 使用普通用户 打开一个新的客户端(我这里用的XShell),

因为我们已经配置了环境变量,所以我们只需要再任意目录输入mongo即可启动客户端

2.2.6 切换到day数据库 由于我们是再day数据库中创建额day用户,所以需要先切换到day库

2.2.7 登录普通用户 我们首先来认证下。

就此我们的普通用户就已经创建成功了

2.3 更新用户角色

  如果我们需要对已存在的用户的角色做修改,那么我们可以使用db.updateUser()函数来更新用户橘色。注意,该函数需要当前用户具有userAdminAnyDatabase

2.3.1 更新角色语法格式 db.updateUser( "roles":[{"role":"角色名称"},{"更新项 2":"更新内容"}]) 2.3.2 需求   目前test管理员用户具备userAdminAnyDatabase用户管理橘色,我们为该用户添加一个dbAdminAnyDatabase数据库管理角色 2.3.3 更新角色 db.updateUser('test',{roles:[{role:'userAdminAnyDatabase',db:'admin'},{role:'dbAdminAnyDatabase',db:'admin'}]})

如果没有提示任何信息则表示更新成功。退出当前客户端重新连接即可生效 2.3.4 查看用户信息 show usres 命令

通过 show users 命令查看到test用户的角色已经发生了变化,增加了dbAdminAnyDatabase角色权限。

2.4 更新用户密码

更新用户密码的两种方式:

1)使用db.updateUser()函数更新密码,必须有用户管理权限才能使用

2)使用db.changeUserPassword()函数更新密码。必须有用户管理全出现才能使用

2.4.1 db.updateUser()方式更新密码   需求:     使用db.updateUser()函数将test用户的密码修改为testtest   语法格式: db.updateUser('用户名',{'pwd':'新密码'})

如果未提示任何信息则表示更新成功。退出当前客户端重新连接认证即可。 重新使用test用户登录

2.4.2 db.changeUserPassword() 方式更新密码  需求:     使用db.changeUserPassword()函数将test用户的密码修改为test   语法格式: db.changeUserPassword('用户名','新密码')

如果什么都未提示则代表更新成功。退出当前客户端重新连接认证即可 重新使用test用户登录

就此更改密码的两种方式已经完成了。

2.5 删除用户

  通过db.dropUser()函数可以删除指定的用户。删除成功后会返回true。在删除用户时候需要切换到创建用户所指定的数据库中才可以删除。

  注意:需要使用具有userAdminAnyDatabase角色管理员用户才可以删除其它用户

2.5.1 需求 我们使用db.dropUser()函数将day用户删除 2.5.2 切换数据库 day 用户在day数据库中,所以需要先切换到day数据库中

2.5.3 通过函数删除用户

我们可以看到,该函数返回了true,标识删除成功!

就此我们日常操作权限,管理用户的命令就已经学完了,很枯燥需要多练喔!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为什么不推荐数据库使用外键?

    我的经验告诉我,很多数据库(大多数我曾经使用的)不包含外键时并不总是一件坏事。在这篇文章中,我想把重点放在为什么的原因上。

    一个优秀的废人
  • APP测试流程及测试点总结

    测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排...

    ITester软件测试小栈
  • 这些常见的 SQL 错误,你经常犯

    分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time...

    一个优秀的废人
  • 30个MySQL数据库常用小技巧,吐血整理。

    【Server Configuration Type】该选项用于设置服务器的类型。单击该选项右侧的向下按钮, 即可看到包括3个选项。

    ITester软件测试小栈
  • MySQL使用规范手册,程序员必知必会

    一个平台或系统随着时间的推移和用户量的增多,数据库操作往往会变慢;而在Java应用开发中数据库更是尤为重要,绝大多数情况下数据库的性能决定了程序的性能,如若前期...

    挨踢小子部落阁
  • java设计模式(9)-桥接模式

    这篇推文分享一下桥接模式,JDBC原理也是运用了桥接模式,先设置驱动名称,链接,来获得数据库链接,降低耦合,减少维护

    爱敲代码的猫
  • SQL从入门到入魔之数据库基本操作

    所有这些信息都可以传递给mysql命令行实用程序,或输入到MySQL Administrator和MySQL Query Browser的服务器连接屏幕。

    ITester软件测试小栈
  • SQL从入门到入魔之初入门

    2.表是一种结构化的文件,可用来存储某种特定类型的数据。表可以保存顾客清单、产品目录,或者其他信息清单;

    ITester软件测试小栈
  • 环境配置(一)

    PHP开发环境 win下推荐使用largon集成开发环境。largon集成了git、PHP、NGINX、apache、redis、memcache、MySQL、...

    大话swift
  • 为什么我们做分布式使用Redis?

    绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。这里...

    一个优秀的废人

扫码关注云+社区

领取腾讯云代金券