初识 MongoDB 服务

一、了解 MongoDB

之前认识了两种相同类型的缓存技术(关系型数据库)memcached 和 Redis, MongoDB是与之前两款完全不同的一个类型的缓存技术!称之为:文档型数据库!

提到文档,一个新概念JSON,MongoDB的文档类似于JSON对象!

JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。

来看一下JSON文档:

{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}
MongoDB 特点:
  • C++编写,基于分布式的,属于NoSQL的一种。
  • 在NoSQL中是最像关系型数据库的 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档、数组及文档数组。
  • 因为基于分布式,所以很容易扩展。
MongoDB和关系型数据库对比:
关系型数据库数据结构:
MongoDB数据结构:
总结:

文档型数据库,类似于JSON,且是分布式结构,支持横向扩展!

二、安装MongoDB

MongoDB支持yum安装,但是版本比较老,所以我们使用创建一个新的扩展源来安装。

cd /etc/yum.repos.d/

vim mongodb.repo
//加入如下内容

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
--------------------------
yum list |grep mongodb //可以看到mongodb相关的rpm包

yum install -y mongodb-org

三、连接MongoDB

systemctl start mongod  //启动服务
vim /etc/mongod.conf    //查看配置文件

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,192.168.59.131  # Listen to local interface only, comment to listen on all interfaces.
如上添加IP 的时候一定需要用 逗号 分开!

[[email protected] ~]# systemctl restart mongod
[[email protected] ~]# mongo --host 192.168.59.131 --port 27017

然后就可以使用配置的IP地址去连接!
  • 在本机可以直接运行命令mongo进入到mongodb shell中
  • 如果mongodb监听端口并不是默认的27017,则在连接的时候需要加–port 选项,例如
mongo --port 27018
  • 连接远程mongodb,需要加–host,例如
mongo --host  127.0.0.1
  • 如果设置了验证,则在连接的时候需要带用户名和密码
mongo -uusername -ppasswd --authenticationDatabase db   //这个和MySQL挺像

四、MongoDB用户管理

use admin   //需要切换到admin库

创建一个新的用户并指定角色和密码等!

db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } )

user指定用户,customData为说明字段,可以省略,pwd为密码,roles指定用户的角色,db指定库名

再次增加一个测试用户:

> db.createUser({user:"asd",pwd:"asd9577",roles:[{role:"root",db:"admin"}]})
Successfully added user: {
	"user" : "asd",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}

关于 MongoDB 角色:

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限

列出所有用户,需要切换到admin库

db.system.users.find()

查看当前库下所有的用户

show users

删除用户

db.dropUser('admin')

若要用户生效,还需要编辑启动脚本

vim /usr/lib/systemd/system/mongod.service

在OPTIONS=后面增--auth

Environment="OPTIONS=--auth -f /etc/mongod.conf"

[[email protected] ~]# systemctl daemon-reload

[[email protected] ~]# systemctl restart mongod

[[email protected] ~]# ps aux | grep mongod
mongod     5258  5.1  4.0 971176 40728 ?        Sl   17:45   0:00 /usr/bin/mongod --auth -f /etc/mongod.conf
root       5283  0.0  0.0 112668   968 pts/0    R+   17:45   0:00 grep --color=auto mongod

使用授权的用户登录格式如下:

mongo -u "admin" -p "asd9577" --authenticationDatabase "admin"

如果不使用账号和密码的方式再去登录就会报错:

> show users
2017-10-17T17:48:50.903+0800 E QUERY    [thread1] Error: not authorized on admin to execute command { usersInfo: 1.0 } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.getUsers@src/mongo/shell/db.js:1539:1
shellHelper.show@src/mongo/shell/utils.js:752:9
shellHelper@src/mongo/shell/utils.js:659:15
@(shellhelp2):1:1

可以看到受限!

创建一个账户可以同时针对两个库授权: test1用户对db1库读写,对db2库只读。

db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } )

之所以先use db1,表示用户在 db1 库中创建,就一定要db1库验证身份,即用户的信息跟随随数据库。比如上述 test1虽然有 db2 库的读取权限,但是一定要先在db1库进行身份验证,直接访问会提示验证失败。

use db2
db.auth("test1", "123aaa")

但是当我I们再次使用db1 去验证那一定是可以的!

> db.auth("test1","123aaa")
1

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kubernetes 1.8.6 集群部署–创建证书(二)

    老七Linux
  • Kubernetes 1.8.6 集群部署–创建证书(二)

    以下操作都在 master 节点即 192.168.161.161 上执行,证书只需要创建一次即可,以后在向集群中添加新节点时只要将 /etc/kubernet...

    老七Linux
  • Zabbix 监控交换机

    如果我们需要监控打印机、路由器、UPS等设备,肯定不能使用zabbix agentd,因为他们不能安装软件的,还好他们一般都支持SNMP协议,这样我可以使用SN...

    老七Linux
  • Linux上安装MongoDB

    MongoDB在Windows上的安装过程整体上来说并不难,网上的资料也比较多,这里我就不介绍了,我主要说下如何在Linux环境下安装MongoDB。 ----...

    江南一点雨
  • 三级选择题考点摘要

    应用服务器指通过各种协议把商业逻辑提供给客户端的程序。它提供了访问商业逻辑的途径以供客户端应用程序使用,应用服务器使用此商业逻辑就像调用对象的一个方法一样。

    ellipse
  • 一篇文章了解腾讯云数据库TencentDB

    注:本文摘自2018年11月22日腾讯云数据库CynosDB新品发布会的演讲实录。随着互联网信息的发展,大家也对云这个词汇也不是特别陌生了,作为全球首选的云服务...

    腾讯云数据库 TencentDB
  • 腾讯云免费数据库,新用户1元特惠专区

    新用户1元特惠:1元体验方案配置为256M内存50G高性能盘,仅适合未使用过云数据库的用户可参,1元体验的MySQL基础版。

    tengxunyun8点com活动整理
  • MySQL之什么是MySQL

    这篇教程是帮助你回答:什么是MySQL?以及告诉你为何 MySQL 是世界上最流行的开源数据库的原因。

    前端黑板报
  • 简明PHP进阶【9-数据库】

    本节来简单介绍下PHP中的数据库,这节也是进阶部分最后一节了。数据库我们还没介绍过,下去我们会好好介绍关于MySQL数据库的知识。

    Lemon黄
  • Python应用MongoDB数据库的一些总结

    数据库,顾名思义,就是数据存储的一个仓库。个人理解,与普通的文件不同,数据库因为是专门用于存储特定格式的数据,所以术业有专攻,它在处理数据相关的事务时更为专业和...

    luanhz

扫码关注云+社区

领取腾讯云代金券