mongodb介绍、安装、用户管理

一.mongodb介绍

MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。官方网址:
https://www.mongodb.com
mongodb和关系型数据库的对比:
在这里插入图片描述
mongodb的数据结构:
在这里插入图片描述

二.mongodb安装(当前最新4.2版本)

官方安装文档(失效的话可以自己在官方找):
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
下面参考官方提供的安装方式安装。

首先第一步搭建好官方的yum源:
cd /etc/yum.repos.d/
vim mongodb-org-4.2.repo
#添加下面的配置
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

#可以先清空yum缓存并重新生成
yum clean all
yum makecache

#查看yum仓库是否包含mongodb
yum list |grep mongodb

#安装mongodb
yum install -y mongodb-org

连接mongodb
先来看一下mongodb的配置文件内容:

vim /etc/mongod.conf

#下面是配置文件中默认未注释部分,并不是全部的
systemLog:     #这个是日志文件
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

storage:
  dbPath: /var/lib/mongo #这个是数据库的数据存放目录
  journal:
    enabled: true

processManagement:
  fork: true 
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile  #这个是进程文件路径
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 27017   #默认端口
  bindIp: 127.0.0.1    #绑定的ip,多个ip用逗号相隔

启动mongodb:

systemctl start mongod

查看端口:

 netstat -lnpt |grep mon
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      1626/mongod         

连接进入mongodb:

#默认端口和ip,可以直接mongo进入
mongo

#用ip和端口连接进入
mongo --port 27017 --host 127.0.0.1

#如果设置了用户和密码
[root@ligen ~]# mongo -u后面接用户名 -p后面接密码 --authenticationDatabase 后面接你加密的数据库
#这个和mysql类似,用户通常是限制于某一个数据库

三.mongodb用户管理

创建用户:
#首先一定要进入一个数据库,才能创建用户,数据库和用户是相关联的
#例如给admin数据库创建一个admin管理员用户,密码admin123

use admin  #创建并且进入
db.createUser( { user:"admin",customData:{description:"superuser"},pwd:"admin123",roles:[ { role:"root",db:"admin" } ] } )
#命令说明:customData是关于用户的描述可省略,pwd是密码,role角色为root表示管理员,db表示授权给admin数据库

此时创建好用户后,可以查看,查看也是要在数据库里面的,并且在哪里创建的用户就只能是在哪里查看的到:

show users
#或者
db.system.users.find()

其中显示结果有这么个字段:"_id" : "admin.admin"表示在admin库里面创建的admin用户。

删除用户:

#例如再次在admin库下创建一个ligen用户,密码aa,授权给testdb库,权限是read
db.createUser( { user:"ligen",pwd:"aa",roles:[ { role:"read",db:"testdb" } ] } )

#查看是否创建成功
show users
#如果有"_id" : "admin.ligen"就没问题
#注意此时我们在testdb库里面是否可以查看ligen用户呢,试一下
use testdb  #创建并进入
show users  #结果为空,答案是否定的,只能在创建的库下面查看

#删除ligen用户,也是要回到admin库下面
use admin
db.dropUser("ligen")

通过创建的用户和密码登入mongodb对应的库,例如我们已经创建好的admin:

#我们需要先编辑一下启动脚本,在OPTIONS=后面加--auth,让用户生效
vim /usr/lib/systemd/system/mongod.service
#添加
Environment="OPTIONS=--auth -f /etc/mongod.conf"

#重启mongodb
systemctl restart mongod
#如果报错,没报错可以不用看下面的
#因为mongodb第一次启动的时候是通过root管理员启动的,需要把进程文件删除,然后启动了,这次启动它会以mongod用户启动
rm -f  /tmp/mongodb-27017.sock 
systemctl start mongod

#通过用户密码登入
mongo -u "admin" -p "admin123" --authenticationDatabase "admin"
#注意如果不是默认127.0.0.1和默认端口,就需要指定host和port

#验证
use admin
show users

身份权限验证
#上面举例用户ligen,有什么办法可以是它在testdb中有权限查看呢,需要先在admin中验证:

db.auth("ligen","aa")  #这样就可以在testdb中查看了

roles角色说明

Read:读权限
readWrite: 读写
dbAdmin:允许用户在指定数据库中执行管理函数,如索引、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
clusteradmin:旨在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDateabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
useradminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的useradmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
root:只在admin数据库可用,超级权限
发布了108 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37369726/article/details/104131018