MONGODB的基本用法

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值