Mongodb
参考文档
安装
macOS 系统使用 brew 安装 mongodb
# 更新 brew
brew update
brew install mongodb
作为服务,立刻启动并且系统登录自动启动
brew services start mongodb
brew services stop mongodb
仅当前启动一次
mongod --config /usr/local/etc/mongod.conf
配置
brew 安装位置
/usr/local/Cellar/mongodb/x.x.x
配置文件
/usr/local/etc/mongod.conf
配置初始内容
systemLog:
destination: file
// 日志文件位置
path: /usr/local/var/log/mongodb/mongo.log
logAppend: true
storage:
// 数据库存储位置
dbPath: /usr/local/var/mongodb
net:
// 绑定访问IP
bindIp: 127.0.0.1
修改配置
当前使用的用户名为 rainx
修改日志文件位置以及数据库位置,添加用户权限验证
systemLog:
destination: file
path: /Users/rainx/Documents/MongoDB/log/mongo.log
logAppend: true
storage:
dbPath: /Users/rainx/Documents/MongoDB/db
net:
bindIp: 127.0.0.1
security:
authorization: enabled
角色介绍
- 数据库用户角色:针对每一个数据库进行控制。
- read:提供了读取所有非系统集合,以及系统集合中的 system.indexes, system.js, system.namespaces
- readWrite:包含了所有read权限,以及修改所有非系统集合的和系统集合中的 system.js 的权限.
- 数据库管理角色:每一个数据库包含了下面的数据库管理角色。
- dbOwner:该数据库的所有者,具有该数据库的全部权限。
- dbAdmin:一些数据库对象的管理操作,但是没有数据库的读写权限。(参考:dbAdmin)
- userAdmin:为当前用户创建、修改用户和角色。拥有 userAdmin 权限的用户可以将该数据库的任意权限赋予任意的用户。
- 集群管理权限:admin数据库包含了下面的角色,用户管理整个系统,而非单个数据库。这些权限包含了复制集和共享集群的管理函数。
- clusterAdmin:提供了最大的集群管理功能。相当于
clusterManager / clusterMonitor / hostManager / dropDatabase的权限组合。 - clusterManager:提供了集群和复制集管理和监控操作。拥有该权限的用户可以操作 config 和 local 数据库(即分片和复制功能)
- clusterMonitor:仅仅监控集群和复制集。
- hostManager:提供了监控和管理服务器的权限,包括 shutdown 节点,logrotate, repairDatabase 等。
- 备份恢复权限:admin数据库中包含了备份恢复数据的角色。包括backup、restore等等。
- clusterAdmin:提供了最大的集群管理功能。相当于
- 所有数据库角色:admin数据库提供了一个mongod实例中所有数据库的权限角色:
- readAnyDatabase:具有read每一个数据库权限。但是不包括应用到集群中的数据库。
- readWriteAnyDatabase:具有readWrite每一个数据库权限。但是不包括应用到集群中的数据库。
- userAdminAnyDatabase:具有userAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
- dbAdminAnyDatabase:提供了dbAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
- 超级管理员权限
- root:dbadmin到admin数据库、useradmin到admin数据库以及UserAdminAnyDatabase。但它不具有备份恢复、直接操作system.*集合的权限,但是拥有root权限的超级用户可以自己给自己赋予这些权限。
- 备份恢复角色:backup、restore;
- 内部角色:__system
创建用户
数据库用户有两种,一种是管理员,用来管理用户,一种是普通用户,用来访问数据。
为 Mongodb 规划用户鉴权时,至少要规划两种角色:用户管理员和数据库用户。如果搭建了分片或主从,可能还会要规划数据库架构管理员的角色,它们专门用来调整数据库的 分布式架构。
创建用户管理员
用户管理员是第一个要创建的用户。在没有创建任何用户之前,你可以随意创建用户;但数据库中一旦有了用户,那么未登录的客户端就没有权限做任何操作了,除非使用db.auth(username, password)方法登录。
用户管理员的角色名叫 userAdminAnyDatabase,这个角色只能在 admin 数据库中创建。
切换到 admin 数据库
use admin
创建用户 xzy
db.createUser({
user: "xzy",
pwd: "123456",
roles:["userAdminAnyDatabase"]
});
创建完了之后,我们应该马上以该用户的身份登录,方法返回 1 表示登录成功。
db.auth( "xzy", "123456" );
创建数据库用户
首先保证你已经以用户管理员的身份登录 admin 数据库。然后用 use 命令切换到目标数据库,同样用db.createUser() 命令来创建用户,其中角色名为 “readWrite”。
> use test
switched to db blog
> db.createUser({ user: "username", pwd: "123456", roles:["readWrite"]})
Successfully added user: { "user" : "username", "roles" : [ "readWrite" ] }
> db.auth( "username","123456" )
1
常用的用户函数
| 函数 | 描述 |
|---|---|
| db.getUsers() | 获得数据库的所有用户权限信息 |
| db.getUser() | 获得数据库某个用户权限信息 |
| db.createRole() | 创建角色 |
| db.updateRole() | 更新角色 |
| db.dropRole() | 删除角色 |
| db.getRole() | 获得某个角色信息 |
| db.dropUser() | 删除用户 |
| db.dropAllUsers() | 删除所有用户 |
| db.grantRolesToUser() | 将一个角色赋予给用户 |
| db.revokeRolesFromUser() | 撤销某个用户的某个角色权限 |
| db.changeUserPassword() | 更改密码 |
数据库操作
如果数据库不存在,则创建数据库,否则切换到指定数据库。
> use blog
switched to db blog
> db
blog
>
查看所有有数据的数据库,刚创建的数据库要插入数据才会显示
> show dbs
admin 0.078GB
local 0.078GB
>
创建 xzy 用户
# > db.createUser({ user: "xzy", pwd: "123456", roles: ["readWrite"] });
> db.createUser({
user: "diandao",
pwd: "diandao",
roles: [{
role: "readWrite",
db: "diandao"
}],
mechanisms : ["SCRAM-SHA-1"]
});
# Successfully added user: { "user" : "xzy", "roles" : [ "readWrite" ] }
Successfully added user: {
"user" : "diandao",
"roles" : [
{
"role" : "readWrite",
"db" : "diandao"
}
],
"mechanisms" : [
"SCRAM-SHA-1"
]
}
获取操作权限
> db.auth( "xzy", "123456" );
创建名为 users 的集合,插入数据
> db.users.insert({ "username": "admin", password: "123456" });
WriteResult({ "nInserted" : 1 })
> show dbs
admin 0.078GB
blog 0.078GB
local 0.078GB
> db.users.find()
{ "_id" : ObjectId("5a9615240449c046146033ab"), "username" : "admin", "password" : "123456" }
>