IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MongoDB简介&开启登录认证 -> 正文阅读

[大数据]MongoDB简介&开启登录认证

MongoDB简介&开启登录认证

本文基于MongoDB4.2编写,主要包括MongoDB简介,聚合操作简介、模型简介和安全;最后介绍MongoDB开启权限认证。

简介

MongoDB是一种易于扩展和部署的文档类型数据库;每条记录在MongoDB中用文档表示,其中文档结构类似于JSON,字段和值对的形式;此外每条文档都隶属于Collection,Collection类似于数据库中的表;此外MongoDB还支持View和请求式view。

文档字段结构

{
    name: "xiaoming",
    school: {
        name: "helloworld"
    },
    "friend":["xiaohua","zhaoshi"],
    "friendInfo":[{
        name: "xiaohua",
        age: 10
    },{
        name: "zhaoshi",
        age: 12
    }]
}
  1. 值为普通类型
  2. 值为一个文档
  3. 值为一个普通类型数组
  4. 值为一个文档类型数组

具有以下优势

  1. Mongo中文档的数据类型和很多语言原生类型相同
  2. 嵌套文档和数组减少了join操作,从而降低开销
  3. 支持动态结构

其他特性

  • 高性能:支持嵌套模型降低io;支持索引
  • 丰富查询语言:聚集查询、文本搜索、空间搜索
  • 高可用:自动故障转移和数据冗余
  • 水平扩展性:支持水平扩展
  • 支持多种存储引擎:事务存储引擎(文档级别并发使用乐观锁)、基于内存存储引擎和第三方存储引擎

聚合操作简介

聚合操作是通过关联多个文档数据经过一系列计算获得单个数据的一种计算操作;MongoDB提供三种计算方式:聚合管道、map-reduce函数和简单聚合函数。

聚合管道使用方式如下:

db.orders.aggregate([
   { $match: { status: "A" } },
   { $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])

匹配status为“A”的数据,根据cust_id字段分组,最后根据分组求每个分组中amout的和。

map-reduce和简单聚合函数请参考官网

文档结构简介

MongoDB的collections创建时默认是不需要指定结构,即MongoDB的表结构是动态可变的;文档结构可分为两种:嵌套结构和引用结构;此外文档原子性写操作中,单文档支持原子性,多文档不支持(4.2以后支持);最后MongoDB3.2开始支持文档格式校验。以下将主要介绍文档格式校验和文档结构设计内容。

文档格式校验

  1. MongoDB3.2开始支持数据更新插入进行有效性校验;可以在创建时通过validator字段添加或创建后使用collMod修改

  2. MongoDB3.6开始支持JSON格式的验证语法,使用方法如下:

    db.createCollection("students", {
       validator: {
          $jsonSchema: {
             bsonType: "object",
             required: [ "name"],
             properties: {
                name: {
                   bsonType: "string",
                   description: "must be a string and is required"
                }       
             }
          }
       }
    })
    

    当加入上述验证后,写入数据时必须指定name字段,否则写入报错。

  3. 其他校验方式:使用查询表达式指定校验规则,设置方法如下:

    db.createCollection( "contacts",
       { validator: { $or:
          [
             { phone: { $type: "string" } },
             { email: { $regex: /@mongodb\.com$/ } },
             { status: { $in: [ "Unknown", "Incomplete" ] } }
          ]
       }
    } )
    

? 更多表达式可参考官网

文档结构选择建议

  1. 如果数据为一对一或一对多,通常情况使用嵌套数据模型;
  2. 如果数据为多对多、重复并不能带来高的读取性能情况下使用常规数据模型(描述关系使用引用);

安全

支持TLS/SSL通信加密;数据安全基于角色赋权;用户安全基于SCRAMx.509实现认证;以下主要介绍角色相关内容

角色简介

MongoDB通过角色来控制用户操作权限和访问权限,MongoDB支持用户自定义角色和使用系统内置角色;以下将介绍内置角色,自定义角色请移步官网

内置角色
数据库用户角色

read:允许在授权db的所有表上进行读操作

readWrite:允许在授权db的所有表上进行读和写操作

使用方法如下

use admin
//创建用户时指定角色
db.createUser(
  {
    user: "test",
    pwd: "password", 
    roles: [ { role: "read", db: "admin" },{ role: "readWrite", db: "admin" }]
  }
)

//创建用户后添加角色
db.grantRolesToUser(
    "test",
    [
      { role: "read", db: "admin" }
    ]
)

//移除角色
db.revokeRolesFromUser(
    "test",
    [
      { role: "readWrite", db: "admin" }
    ]
)

//查看用户信息
db.getUser("test")
数据库管理员角色

dbAdmin:允许在授权db执行结构相关任务、索引任务和聚集统计任务,该角色没有用户和角色管理能力

dbOwner:包含readWrite、dbAdmin和userAdmin权限

userAdmin:允许在授权db上进行创建修改角色或用户;由于userAdmin允许授予用户任何权限给任何角色,因此如果用户拥有admin的userAdmin角色,即拥有最高权限

使用方法如下

use admin
//创建用户时指定角色
db.createUser(
  {
    user: "test",
    pwd: "password", 
    roles: [ { role: "dbOwner", db: "admin" }]
  }
)
所有库角色

以下角色将获得所有db的相关权限,除了local和config这两个db。

readAnyDatabase:该角色能读取任何db的collection

readWriteAnyDatabase:该角色能读写任何db的collection

userAdminAnyDatabase:该角色在任何db上都拥有userAdmin权限

dbAdminAnyDatabase:该角色在任何db上都拥有dbAdmin权限

使用方法如下

use admin
//创建用户时指定角色
db.createUser(
  {
    user: "test",
    pwd: "password", 
    roles: [ "readWriteAnyDatabase","userAdminAnyDatabase"]
  }
)

//创建用户后添加角色
db.grantRolesToUser(
    "test",
    [
      "readWriteAnyDatabase"
    ]
)

//移除角色
db.revokeRolesFromUser(
    "test",
    [
      "readWriteAnyDatabase"
    ]
)
超级权限

MongoDB内置有一个超级权限角色root,该角色是这些角色dbOwner、userAdmin、userAdminAnyDataBase、clusterAdmin、restore和backup的合并版

使用方法如下

use admin
db.createUser(
  {
    user: "root",
    pwd: "123456",  
      roles: [
       "root"
    ]
  }
)
其他

更多角色信息,例如:集群管理角色、备份修复角色请移步官网

开启MongoDB登录权限验证

创建用户

mongo
use admin
//创建root用户并授予超级权限
db.createUser(
  {
    user: "root",
    pwd: "password",  
      roles: [
       "root"
    ]
  }
)

//查看创建的用户信息
db.getUser("root") 

//关闭mongo
db.adminCommand( { shutdown: 1 } )

修改配置&重启MongoDB

方式一

在启动命令行中加入--auth开启权限认证

mongod --auth --port 27017 --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log

方式二

在配置文件中(默认:/etc/mongod.conf)添加如下信息,然后重启(mongod --config /etc/mongod.conf):

security:
    authorization: enabled

登录MongoDB

第一种登录方式

mongo -u root -p --authenticationDatabase “admin”

第二种登录方式

mongo 
use admin
db.auth("root","password")

Q&A

  1. 如何创建库区?

    MongoDB无需创建库区,直接使用;在命令行直接使用use 库区名称即可。

参考链接

https://www.mongodb.com/docs/v4.2/introduction/

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-25 11:38:09  更:2022-05-25 11:38:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:15:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码