副本集的管理(二)
五、用户管理
MongoDB默认是不开启用户认证模式的,但是为了数据库的安全和管理,我们需要开启用户认证。
数据库用户角色:read、readWrite; 数据库管理角色:dbAdmin、dbOwner、userAdmin; 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManage; 备份恢复角色:backup、restore; 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 超级用户角色:root 内部角色:__system
1、用户权限说明
权限 | 说明 |
Read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库执行管理函数(索引创建删除,查看统计,访问system.profile) |
userAdmin | 允许用户想system.user集合写入,可以在指定数据库中管理用户 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制相关的函数的管理权限 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读取权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库可用,赋予用户所有数据库的dbAdmin权限 |
root | 只在admin数据库中可用,超级权限 |
2、创建用户
语法:
1.创建用户
>use admin
> db.createUser({"user":"root","pwd":"123","roles":[{role:"root",db:"admin"}]})
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
2.验证用户
> db.auth("root","123")
1
3.查看所有创建用户
rs0:PRIMARY> use admin
switched to db admin
rs0:PRIMARY> show users
{
"_id" : "admin.root",
"user" : "root",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}4.如果一个用户需要有备份恢复的权限,那么需要额外授予
db.createRole({role:'sysadmin',roles:[], privileges:[ {resource:{anyResource:true},actions:['anyAction']}]})
db.grantRolesToUser( "root" , [ { role: "sysadmin", db: "admin" } ])
具体权限如下:
rs0:PRIMARY> show users
{
"_id" : "admin.root",
"user" : "root",
"db" : "admin",
"roles" : [
{
"role" : "sysadmin",
"db" : "admin"
},
{
"role" : "root",
"db" : "admin"
}
]
}3、配置文件
# cat /usr/local/repl/mongod.conf auth = true keyFile=/data/mongodb-3.4.18/KeyFile.file
4、注意点:
1.root用户必须进入admin数据创建 2.对于单独某个数据库的用户创建,需要进入指定数据库下进行创建 3.创建超级用户后需要修改配置文件重启服务才能生效
5、集群配置用户认证
3.6版本以下: 1.集群之间的复制增加keyFile认证 # openssl rand -base64 756 > /data/mongodb-3.4.18/KeyFile.file # chmod 400 /data/mongodb-3.4.18/KeyFile.file 2.修改配置文件 # cat /usr/local/repl/mongod.conf auth = true keyFile=/data/mongodb-3.4.18/KeyFile.file 3.重启服务器 4.0版本以上: 1.集群之间的复制增加keyFile认证 # openssl rand -base64 90 -out ./testKeyFile.file # chmod 600 testKeyFile.file 一定要更改成 600 权限,否正会报错 2.修改配置文件 # cat /usr/local/repl/mongod.conf auth = true keyFile=/data/mongodb-3.4.18/testKeyFile.file 3.重启服务器
六、计算空间消耗
1、查看某个数据库统计信息
db.stats() / db.runCommand({dbStats : 1,scale : 1073741824})
rs0:PRIMARY> use test
switched to db test
rs0:PRIMARY> db.stats()
{
"db" : "test",
"collections" : 13, //集合数
"views" : 0,
"objects" : 106703, //文档数
"avgObjSize" : 76.03043025969279, //每个文档的平均大小(字节为单位)
"dataSize" : 8112675, //未压缩数据总大小;MMAPv1存储引擎下,datasize包含预分配空间和填充因子,该大小因文档减小而减小;WiredTiger存储引擎下,datasize可能要比storagesize大,该大小会随着文档的减小而减小
"storageSize" : 2797568, //集合占用空间总大小,该值不会随着文档的remove或者减小而减小,如果存储引擎开启compression的情况下,该值可能会比dataSize小。
"numExtents" : 0,
"indexes" : 14, //索引数目
"indexSize" : 2560000, //索引大小
"fsUsedSize" : 29936922624,
"fsTotalSize" : 37688381440,
"ok" : 1,
"operationTime" : Timestamp(1557390462, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1557390462, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
db.runCommand({dbStats : 1,scale : 1073741824}) //scale指定单位为G(1024*1024*1024)
[
{
db: "local", //数据库名
collections: 8, //集合数
objects: 1225442,
avgObjSize: 7050.300224735239,
dataSize: 8.046379320323467,
storageSize: 5.111701965332031, //如果该空间大小异常大,说明该空间碎片话比较严重
numExtents: 0,
indexes: 6,
indexSize: 2.25067138671875E-4,
ok: 1.0
}
]2、查看某个集合的统计信息
db.xx.stats() /db.runCommand({"collStats":"oplog.rs",scale:1048576})
rs0:PRIMARY> db.dsir.stats()
{
"ns" : "test.dsir",
"size" : 2280000, //datasize
"count" : 30000,
"avgObjSize" : 76,
"storageSize" : 737280,
"capped" : false,
"wiredTiger" : {
},
"nindexes" : 1, //mmapv1存储引擎
"totalIndexSize" : 675840, //index大小
"indexSizes" : {
"_id_" : 675840
}
}
db.runCommand({"collStats":"oplog.rs",scale:1048576}) //查看oplog.rs集合的大小,scale指定单位
[
{
ns: "local.oplog.rs",
count: 1251026,
size: 8200,
avgObjSize: 6873,
storageSize: 5233,
capped: true,
max: -1,
maxSize: 8192,
sleepCount: 0,
sleepMS: 0,
guardLastUpdate: 1562914335,
oplogDeleteGuard: 1562914291,
oplogMinOptime: 1562916035,


