简明mongo数据库

367 阅读3分钟

安装

环境:ubuntu 安装方式: .tgz包

下载包

tar -zxvf mongodb-linux-*-4.2.3.tgz

复制bin文件

有两个关键工具包, mongo 客户端 mongod 服务端

sudo cp <mongodb-install-directory>/bin/* /usr/local/bin/

指定路径

--dbpath 存储数据库数据 --logpath 存储log文件

启动数据库服务

如果不想用root来启动,可以把chown需要读写的文件的拥有者改成当前用户

sudo mongod --dbpath /home/ubuntu/data/db/ --logpath /home/ubuntu/data/log/mongo.log &

配置

配置文件配置方式 "k=v" 方式

# mongodb.conf
  
# Where to store the data.
#dbpath=/var/lib/mongodb
dbpath=/home/ubuntu/data/db

#where to log
logpath=/home/ubuntu/data/log/mongodb.log  

logappend=true

bind_ip = 127.0.0.1
#port = 27017

# Enable journaling, http://www.mongodb.org/display/DOCS/Journaling
journal=true

# Enables periodic logging of CPU utilization and I/O wait
#cpu = true

# Turn on/off security.  Off is currently the default
#noauth = true
#auth = true  // 开启权限检查

通过配置文件启动mongod

mongod -f /etc/mongodb.conf

权限控制

mongo默认情况是没有权限控制,用户可以操作所有数据库,但是同时默认只允许本地连接数据库

显然这样满足不了我们正常的需求,所以下面通过配置与创建用户来实现数据库权限管理

连接数据库

mongo

切换admin数据库

use admin

创建超级用户,拥有所有权限

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

创建业务数据库管理员

对example数据库有读写权限,对其他数据库只有读权限

db.createUser({
    user:"example_admin",
    pwd:"123456",
    customData:{
        name:'jim',
        email:'jim@qq.com',
        age:18,
    },
    roles:[
        {role:"readWrite",db:"example"},
        'read'// 对其他数据库有只读权限,对example读写权限
    ]
})

数据库角色权限列表

  • 数据库用户角色:read、readWrite;
  • 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  • 集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;
  • 备份恢复角色:backup、restore;
  • 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  • 超级用户角色:root
  • 内部角色:__system
  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限

权限配置开关

bind_ip = 0.0.0.0 # 允许所有外部ip访问
auth = true # 开启权限检验

权限使用

如果数据库操作前不授权,将无法对数据库操作

use admin
db.auth("root","1234")
use example
db.example.find()

远程连接

mongo <ip>:<port>

其他

推荐客户端工具 Robot3T 如果使用了权限管理,需要填写如下信息, auth Mechanism 是加密方式, 默认为SCRAM