MongoDB安装和配置
官网下载5.0.3, 并安装. Windows下安装后并选择使用windows 服务来启动mongo服务.
======================================
免密登录
======================================
初次登录, 打开 mongo.exe 客户端, 不需要输入用户密码就能登录, 安全性不高, 后面介绍如何加上安全认证.
在mongo.exe中执行show dbs命令, 能显示有三个数据库, 说明登录成功.
查看 mongo 的配置文件mongod.cfg
注意默认绑定IP 是127.0.0.1, 如果要在局域网内访问mongo服务, 需要修改IP为 0.0.0.1, 即绑定所有的网卡.
======================================
创建账号
======================================
创建一个mongoDB 的超级管理员root账号
先切到admin db下, 账号名设定为 root, 角色也选 root.
use admin db.createUser({user:'root', pwd: '123456', roles:['root']})
使用 db.auth() 方法可以验证用户密码是否OK.
在test db 下的test_user/test_guest/test_owner 账号
use test db.createUser({user:'test_user', pwd: '123456', roles:[{db:'test', role:'readWrite'}]}) db.createUser({user:'test_guest', pwd: '123456', roles:[{db:'test', role:'read'}]}) db.createUser({user:'test_owner', pwd: '123456', roles:[{db:'test', role:'dbOwner'}]})
在 admin 数据库的 system.users 集合中, 可以查看所有用户信息.
======================================
启用验证方式登录
======================================
mongo 的配置文件mongod.cfg 增加 auth 选项
mongod.cfg新版使用yml格式, 配置如下:
security:
authorization: enabled
mongod.cfg老版文件, 配置如下:
auth=true
再次启动mongo.exe客户端, 运行 show dbs, 没有列出任何数据库, 可见并未进行真正登录成功
mongodb.exe 客户端使用账号密码方式登录, 以root账号登录:
.\mongo.exe mongodb://localhost:27017/admin -u root -p 123456
端口后的/db, 这里的db和应用程序连接url的authSource含义相同, 用来指定在哪个库验证用户. 虽然 admin 库下存储所有账号的用户名和密码, 但 authSource 参数不一定就是 admin 库, 准确地说: 在哪个库下创建用户, authSource 就是那个库.
root 账号虽然能管理任何数据库, 但不能直接登录test 数据库.
test_owner 账号登录:
======================================
应用程序url写法:
======================================
mongodb://root:123456@127.0.0.1:27017/admin?authSource=admin&w=majority&wTimeoutMS=5000&journal=true&readPreference=primary&retryWrites=true mongodb://test_owner:123456@127.0.0.1:27017/test?authSource=test&w=majority&wTimeoutMS=5000&journal=true&readPreference=primary&retryWrites=true
- authSource 参数, 用来指定在哪个库验证用户. 虽然 admin 库下存储所有账号的用户名和密码, 但 authSource 参数不一定就是 admin 库, 准确地说: 在哪个库下创建用户, authSource 就是那个库.
- retryWrites 采用可重试写入方式, 设定 retryWrites 为true 后, writeConcern 参数配不能设置为 0
- w 参数即 writeConcern, 设置为 majority, 保证每次写操作都成功写入到复制集中的多数服务器中, 数据安全性较好.
- j 参数即 journal HAL日志, j=true, 落盘后返回写操作, j=false, 刷到内存后即返回写操作.
- wTimeoutMS 设定 writeConcern 的超时时间, 单位毫秒, 如果没有设定, 则写操作可能会无限阻塞等待.
- readPreference 参数, 设定读操作选用节点的策略, 默认为只从主节点读取, 可选项有:
- primary (只主)只从 primary 节点读数据,这个是默认设置
- primaryPreferred (先主后从)优先从 primary 读取,primary 不可服务,从 secondary 读
- secondary (只从)只从 scondary 节点读数据
- secondaryPreferred (先从后主)优先从 secondary 读取,没有 secondary 成员时,从 primary 读取
- nearest (就近)根据网络距离就近读取,根据客户端与服务端的PingTime实现
======================================
MongoDB for VS Code插件的使用
======================================
MongoDB 官方的VS code插件, 可以编写playground 文件, 语法是 js, 可以编写一些CRUD的脚本,
如果是使用Run selected line from playground 命令, 选择部分要包含 use("test") 代码来切换到目标DB, 否则都是在默认db中执行.
另外, 输出窗口也切换到 Playground output, 这样我们能看到一些自己的print()结果.
======================================
mongodb role类型
======================================
数据库用户角色(Database User Roles):
read:授予User只读数据的权限
readWrite:授予User读写数据的权限
数据库管理角色(Database Administration Roles):
dbAdmin:在当前DB中执行管理操作
dbOwner:在当前DB中执行任意操作
userAdmin:在当前DB中管理User
备份和还原角色(Backup and Restoration Roles):
backup
restore
跨库角色(All-Database Roles):
readAnyDatabase:授予在所有数据库上读取数据的权限
readWriteAnyDatabase:授予在所有数据库上读写数据的权限
userAdminAnyDatabase:授予在所有数据库上管理User的权限
dbAdminAnyDatabase:授予管理所有数据库的权限
集群管理角色(Cluster Administration Roles):
clusterAdmin:授予管理集群的最高权限
clusterManager:授予管理和监控集群的权限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.
clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限
hostManager:管理Server
超级角色(super master Roles)
root :超级账户和权限,只在admin中可用
======================================
参考
======================================