MongoDB初了解——用户权限

栏目: 数据库 · 发布时间: 5年前

内容简介:本文所述MongoDB版本为4.0.5,笔者对MongoDB刚接触,对各个版本的MongoDB不甚了解,本文不对该版本的MongoDB做特性介绍,所涉及命令也许对其余版本不适用。因为目前有一个试验性的项目想要使用NoSQL,而MongoDB在工作中有一定的接触,所以这个项目打算使用MongoDB,而在真正从下载到安装到使用的时候发现了不少的知识点,以此作为记录。用户权限问题是遇到的第一个问题,我从官网上找来Mac os环境的MongoDB的安装包,照着几个网络博客创建了一个自定义的mongod.conf配置

本文所述 MongoDB 版本为4.0.5,笔者对MongoDB刚接触,对各个版本的MongoDB不甚了解,本文不对该版本的MongoDB做特性介绍,所涉及命令也许对其余版本不适用。

因为目前有一个试验性的项目想要使用NoSQL,而MongoDB在工作中有一定的接触,所以这个项目打算使用MongoDB,而在真正从下载到安装到使用的时候发现了不少的知识点,以此作为记录。

用户权限问题是遇到的第一个问题,我从官网上找来Mac os环境的MongoDB的安装包,照着几个网络博客创建了一个自定义的mongod.conf配置文件,也不知道里面配置项是什么就通过命令 mongod --cofig mongod.conf 启动起来了跟着一步一步也算是启动起来了。配置项如下:

#mongodb config file
dbpath=/Users/reesemonica/mongodb/data/db
logpath=/Users/reesemonica/mongodb/mongod.log
logappend=true
fork=true
auth=true

这个配置项我只修改了数据文件的路径和日志路径。

结果一启动在并且进入mongo命令行模式中想通过 show dbs 来查看有哪些数据库就抛出了一个错误:

Error: listDatabases failed:{
    "ok" : 0,
    "errmsg" : "command listDatabases requires authentication",
    "code" : 13,
    "codeName" : "Unauthorized"
}

看这意思是说需要权限,可我哪儿知道这个权限从哪儿来,搜了一下问题,结果是说MongoDB默认是可以不通过权限操作的,结果我在自定义配置mongod.conf中配置了 auth=true ,也就是说我自己配置了需要权限操作。

权限就涉及到用户的创建,而且需要创建一个**超级用户**,找了一下命令:

db.createUser(
{
  user: "root",
  pwd: "root",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
} )

创建用户的命令的各个参数基本上通过参数名就知道是做什么的,其中roles.db参数是指定用户的数据库,admin数据库虽不知道它具体做什么的,但既然创建超级用户需要在这里,想必就是存储一些用户信息的。

在创建好超级用户后,此时还不能执行show dbs命令,还需要做一次权限认证 db.auth('root','root') ,返回1表示认证成功,此时再输入show dbs会回显以下:

admin 0.000GB
config 0.000GB
local 0.000GB

这都是MongoDB默认的数据库,我想自己创建一个数据库名字为recommended,执行,如果recommended数据库不存在则会创建,这并不是真正的创建,而是只有当有数据插入时才会真正创建,再在use recommened命令后执行 db.recommened.insert({"name":"kevin"}) ,我本以为通过root这个“超级用户”就可以畅通无阻地在MongoDB中翱翔,然而我错了,又抛了错误:

WriteCommandError({
    "ok" : 0,
    "errmsg" : "not authorized on recommended to execute command { insert: \"recommended\", ordered: true, lsid: { id: UUID(\"5b1b337e-831a-4fb2-b90c-d6d0b347ad79\") }, $db: \"recommended\" }",
    "code" : 13,
    "codeName" : "Unauthorized"
})

这意思还是没有授权,但我明明不是已经创建了一个超级用户了吗,MySQL不就能通过一个超级用户畅通无阻吗。

事实是,MongoDB的用户权限和数据库是绑定的。也就是创建一个新的数据库,并在数据库中插入数据的正确操作应该是需要创建与之对应的用户,下面退出MongoDB命令行模式,重新进入:

1. 输入 use admin ,进入admin数据库,root用户需要在admin数据库中认证。

2. 输入 db.auth('root','root') 超级用户进行认证

3. 输入 db.createUser({user: "okevin",pwd: "123456",roles: [ { role: "readWrite", db: "recommended" } ]} ) 创建okevin用户,并为它指定数据库为recommended。

4. 输入 db.auth('okevin','123456') 切换认证用户。

5. 输入 use recommended 切换至recommended数据库

6. 输入 db.repo.insert({"name":"kevin"}) ,创建一条数据。

这才是创建一个数据库,并插入一条数据库的正确姿势,并且一定记住几点:

  • 数据库和用户是绑定的,光创建一个超级用户并不能操作在其他新建的数据库中插入数据
  • 在切换数据库时,先切换认证用户,不然会出现too many users are authenticated的错误。

以上是学习MongoDB所积累到的第一个知识点**用户权限**,通过命令行模式不足以直观地展示数据,可使用其他可视化 工具 对MongoDB进行操作,例如Robo 3T。

这是一个能给 程序员 加buff的公众号 

MongoDB初了解——用户权限


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Uberland

Uberland

Alex Rosenblat / University of California Press / 2018-11-19 / GBP 21.00

Silicon Valley technology is transforming the way we work, and Uber is leading the charge. An American startup that promised to deliver entrepreneurship for the masses through its technology, Uber ins......一起来看看 《Uberland》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器