zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

mongoDB介绍与客户端认证权限

2023-09-11 14:16:28 时间

 mongoDB简介

        Mongo 是 humongous 的中间部分,在英文里是“巨大无比”的意思。所以 MongoDB 可以翻译成“巨大无比的数据库”,更优雅的叫法是“海量数据库”。

        Mongodb是一款非关系型数据库,说到非关系型数据库,区别于关系型数据库最显著的特征就是没有SQL语句,数据没有固定的数据类型,关系数据库的所使用的SQL语句自从 IBM 发明出来以后,已经有 40 多年的历史了,但是时至今日,开发程序员一般不太喜欢这个东西,因为它的基本理念和程序员编程的想法不一致。后来所谓的 NoSQL 风,指的就是那些不用 SQL 作为查询语言的数据存储系统,而文档数据库 MongoDB 正是 NoSQL 的代表。

           看一下当下 数据库的排名就会发现,目前排在Mongodb数据库前面的无一例外是老牌的关系型数据库,而在No SQL序列中,Mongodb排名第一,且有上升的趋势,以下来自 https://www.db-engines.com 的数据

mongoDB和关系型数据库的差异

1. MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。MongoDB数据模型和你的对象在内存中的表现形式一样,一目了然的对象模型。

关系型数据库设计(第三范式):

2.同一个集合中可以包含不同字段(类型)的文档对象:同一个集合的字段可能不同

3.线上修改数据模式,修改时应用与数据库都无须下线

关系型数据库和文档型数据库主要概念对应

关系型数据库

文档型数据库

模型实体

集合

模型属性

字段

模型关系

表关联

内嵌数组,引用字段关联

mongodb客户端连接

客户端使用( mongo shell, 用来操作MongoDB的javascript客户端界面 ):

1. 连接服务

mongo --host <HOSTNAME> --port <PORT> 

# 如果在本机使用的都是默认参数,也可以直接忽略所有参数

2. 设置密码

use admin # 设置密码需要切换到admin库

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


use appdb
rs0:PRIMARY> db.createUser( {user: "appdb", pwd: "appdb", roles: [{role: "dbOwner",db:"appdb" }] })
Successfully added user: {
        "user" : "appdb",
        "roles" : [
                {
                        "role" : "dbOwner",
                        "db" : "appdb"
                }
        ]
}
删除用户 db.dropUser("appdb")

show users # 查看所有用户信息

use admin; 切换库
> show users
{
        "_id" : "admin.appdb",
        "userId" : UUID("1a07a033-4b77-4794-936f-9edfb64a3e79"),
        "user" : "appdb",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
}
> 

3. 停服务

db.shutdownServer()  # 停掉服务

以授权模式启动

mongod -f  mongodb.cfg  --auth 

[root@node01 mongodb4.4.9]# mongo -uappdb -pappdb --authenticationDatabase=appdb
MongoDB shell version v4.4.9
connecting to: mongodb://127.0.0.1:27017/?authSource=appdb&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("29a69e65-335f-48cf-8710-dc96bb5ce157") }
MongoDB server version: 4.4.9
> show dbs
appdb  0.000GB

使用admin登陆

[root@node01 ~]# docker exec -it mongodb mongo -uroot -proot --authenticationDatabase=admin 
> show dbs
admin   0.000GB
appdb   0.000GB
config  0.000GB
local   0.000GB