MONGODB的安装
# 下载地址:https://www.mongodb.com/try/download/community
# 选择自己想要的类型版本
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.5.tgz
tar -xf mongodb-linux-x86_64-rhel70-5.0.5.tgz -C /usr/local
vi /etc/profile
export PATH=<mongodb-install-directory>/bin:$PATH
source /etc/profile
MONGODB的基本用法
#配置文件配置
dbpath = /var/lib/mongodb
logpath = /var/log/mongodb/mongodb.log
port = 27017 fork = true
timeZoneInfo = /usr/share/zoneinfo
logappend = true
#nohttpinterface = true
#auth选项在未创建用户时不开启
auth = true
bind_ip=0.0.0.0
记住库名是库名,,用户是用户,角色是角色,,use之后得是库名,,不是用户
用户是在创建时与库绑定的,绑定哪个库,,哪个库就有这个用户
在不同库下get用户,得到的信息是不同的
启动
mongod -f filename-config
关闭
mongod --shutdown -f filename-config
连接(开启拉auth后可以使用下列方式远程连接)
mongo --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
连接
mongo
认证(开启拉auth,需要下面这步认证)
db.auth("username","passwd")
创建库(use即是切换库环境,但如果切换到库没有,则会创建库)
use 库名
#创建一个超级管理员角色
use admin
db.createUser({user:'root',pwd:'ProYbj123',roles:[{ 'role':"root",'db':"admin"}]});
#在指定库下创建授权用户
#记住先要use到该库下
use ttxyh
db.createUser({user:"gdybtx",
pwd:"Digitalgd123",
roles:
[{role:"readWrite",
db:"ttxyh"
}]})
> db.getUser("gdybtx")
{
"_id" : "ttxyh.gdybtx",
"user" : "gdybtx",
"db" : "ttxyh", #注意这里的库名
"roles" : [
{
"role" : "readWrite",
"db" : "ttxyh"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
错误示例
先切换到admin库
> use admin
#在此库下创建gdybtx用户对库ttxyh的权限
> db.createUser({user:"gdyb",
pwd:"Digitalgd123",
roles:
[{role:"readWrite",
db:"debugging_platform"
}]})
> db.getUser("gdybtx")
{
"_id" : "admin.gdybtx",
"user" : "gdybtx",
"db" : "admin", #可以看到这里的库名变成admin,虽然下面依然是ttxyh,
#但这样创建的用户是无权限远程连接ttxyh库
"roles" : [
{
"role" : "readWrite",
"db" : "ttxyh"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
获取用户角色
获取用户角色
> db.getUser("gdybtx")
{
"_id" : "ttxyh.gdybtx",
"user" : "gdybtx",
"db" : "ttxyh",
"roles" : [
{
"role" : "readWrite",
"db" : "ttxyh"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
更改密码
#更改密码
db.changeUserPassword("username", "newpasswd")
或
db.updateUser("username",{
pwd:"new password",
customData:{
"title":"PHP developer"
}
})
回收权限
#回收权限
> db.revokeRolesFromUser("gdybtx",[{role:"readWrite",db:"ttxyh"}] )
> db.getUser("gdybtx")
{
"_id" : "ttxyh.gdybtx",
"user" : "gdybtx",
"db" : "ttxyh",
"roles" : [ ], #代表gdybtx用户对ttxyh库已经没有任何权限
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
删除指定库下的指定用户
#删除指定库下的指定用户
> use gdybtx
switched to db gdybtx
> db.getUser("gdybtx")
{
"_id" : "gdybtx.gdybtx",
"user" : "gdybtx",
"db" : "gdybtx",
"roles" : [ ],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
> db.dropUser("gdybtx")
true
> db.getUser("gdybtx")
null
授予用户角色(如果该库下没有此用户则需要用,db.createUser)
db.grantRolesToUser(
"root",
[
{ role: "dbAdminAnyDatabase", db: "admin" }
]
)
系统角色与自建角色
#下面四个权限只限于admin库使用,,用在其他库会报错
readAnyDatabase——与“read”角色相同
readWriteAnyDatabase——与“readWrite”角色相同
userAdminAnyDatabase——与‘userAdmin’角色相同
dbAdminAnyDatabase——与“dbAdmin”角色相同
> use admin
> db.createUser({user:"gdybtx",
pwd:"Digitalgd123",
roles:
[{role:"readWriteAnyDatabase",
db:"admin"
}]})
> db.getUser("gdybtx")
{
"_id" : "admin.gdybtx",
"user" : "gdybtx",
"db" : "admin",
"roles" : [
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
#当作用于普通库时
> use ttxyh
switched to db ttxyh
> db.getUser("gdybtx")
null
> db.createUser({user:"gdybtx",
pwd:"Digitalgd123",
roles:
[{role:"readWriteAnyDatabase",
db:"ttxyh"
}]})
#报错显示没有此权限
2021-03-23T17:42:08.630+0800 E QUERY [js] Error: couldn't add user: No role named readWriteAnyDatabase@ttxyh :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1491:15
@(shell):1:1
角色分类
系统角色
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root
这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色:__system
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
自建角色
#可从官网找
创建一个可以删除库连接的角色
db.createRole(
{
role: "dropSystemViewsAnyDatabase",
privileges: [
{
actions: [ "dropCollection" ],
resource: { db: "", collection: "system.views" }
}
],
roles: []
}
)
创建一个管理集群资源的角色
db.createRole(
{
role: "mongostatRole",
privileges: [
{ resource: { cluster: true }, actions: [ "serverStatus" ] }
],
roles: []
}
)
创建一个管理集群和数据库的角色
db.createRole(
{
role: "manageOpRole",
privileges: [
{ resource: { cluster: true }, actions: [ "killop", "inprog" ] },
{ resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
],
roles: []
}
)
#查看Mongo库和表
> db.auth("gdybtx","Digitalgd123")
1
> db.stats()
{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { dbstats: 1.0, scale: undefined, $db: \"admin\" }",
"code" : 13,
"codeName" : "Unauthorized"
}
> show dbs
admin 0.000GB
config 0.000GB
debugging_platform 0.000GB
local 0.000GB
> use debugging_platform
> db.stats();
{
"db" : "debugging_platform", //当前数据库
"collections" : 3, //当前数据库多少表
"objects" : 4, //当前数据库所有表多少条数据
"avgObjSize" : 51, //每条数据的平均大小
"dataSize" : 204, //所有数据的总大小
"storageSize" : 16384, //所有数据占的磁盘大小
"numExtents" : 3,
"indexes" : 1, //索引数
"indexSize" : 8176, //索引大小
"fileSize" : 201326592, //预分配给数据库的文件大小
"nsSizeMB" : 16,
"dataFileVersion" : {
"major" : 4,
"minor" : 5
},
"ok" : 1
}
mongodb的拷贝
#备份
mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件保存路径
#还原mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 备份文件
--drop 如果库里有数据则删除数据
mongodb数据库表的导出
mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -q 条件导出 --csv -o 文件名
导出整张表
mongoexport -d wooyun -c users -o /home/mgtc/mongodb/wooyun/user.dat
导出某些字段
mongoexport -d wooyun -c users --csv -f name,uuid -o /home/mgtc/mongodb/wooyun/user.csv
根据条件导出
mongoexport -d wooyun -c users -q '{uuid:{$gt:1}}' -o /home/mgtc/mongodb/wooyun/user.json
四、mongoimport导入表,或者表中部分字段
命令参数:
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsert --drop
-–upsert: 插入或者更新现有数据
还原整表导出的非csv文件
mongoimport -d wooyun -c users --upsert users.dat
还原部分字段的导出文件
mongoimport -d wooyun -c users --upsertFields name,uuid users.dat
还原导出的csv文件
mongoimport -d wooyun -c users --type csv --headerline --file users.csv