一、前言
用户权限管理很重要,只给需要的权限,防止应用系统漏洞导致脱库,
1.下载:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.6.tgz
2.解压
tar -zxvf mongodb-linux-x86_64-rhel70-4.2.6.tgz -C /usr/local/mongodb
3.新建目录
mkdir /var/log/mongodb
mkdir /var/lib/mongo
mkdir /var/run/mongodb
4.增加配置文件内容
vi /etc/mongod.conf
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
启动:
mongod --dbpath=/var/lib/mongo --logpath=/var/log/mongodb/mongod.log --logappend --port=27017 --fork --auth
或: mongod --config /etc/mongod.conf
停止:
mongod --shutdown --config /etc/mongod.conf 或登陆后操作:db.shutdownServer();
登录:
mongo --port 27017 -u "username" -p "url编码" --authenticationDatabase "admin"
二、基本操作
查询数据库
show dbs
或
show databases
创建数据库
use dbName
查看表
show tables;
插入数据
db.<tableName>.insert();
如:db.members.insert({name:"Michael",age:18,...});
查询
db.<tableName>.find(); 或 db.system.users.find(); 或 show users;
修改
如:db.members.update({name:"Michael"},{$set:{age:20}});
删除表中的数据
如:db.members.remove({name:"Michael"});
删除全部:db.members.remove({});
删除表
db.members.drop();
删除数据库
db.dropDatabase();
四、用户管理
添加用户,切换到需要添加用户的db
use xxxx
执行添加
db.createUser(
{
user:"username",
pwd:"password_url编码",
roles:[
{role:"read", db:"xxxx"},
{role:"readWrite", db:"test"}
]
}
)
添加超级用户,切换到admin数据库
use admin
执行添加
db.createUser(
{
user:"username",
pwd:"password_url编码",
roles:[
{role:"root", db:"admin"},
{role:"dbAdminAnyDatabase",db:"admin"}
]
}
)
删除用户,切换到用户授权的db
use xx
执行删除操作
db.dropUser("username") 或者:db.system.users.remove({user:"test"})
更新用户
切换到用户授权的db
use xx
执行更新,字段会覆盖原来的内容
db.updateUser("username",{
pwd:"new password_url编码",
customData:{
"title":"PHP developer"
}
})
更新用户密码
use xx
db.changeUserPassword("username","newpassword_url编码")
查看用户信息
use admin
db.getUser("username")
删除用户角色
use xx
db.revokeRolesFromUser(
"usename",
[
{ role: "readWrite", db: "accounts" }
]
)
添加用户角色
use xx
db.grantRolesToUser(
"reportsUser",
[
{ role: "root", db: "admin" }
]
)
五,角色管理
自定义角色
自定义角色保存在admin数据库system.roles集合中
切换到admin数据库
use admin
执行添加
db.createRole(
{
role: "manageOpRole",
privileges: [
{ resource: { cluster: true }, actions: [ "killop", "inprog" ] },
{ resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
],
roles: []
}
)
查看角色信息
use admin
db.getRole("rolename",{showPrivileges:true})
删除角色
use admin
db.dropRole("rolename")
六,系统内置用户角色
大部分内置的角色对所有数据库共用,少部分仅对admin生效
数据库用户类
read
非系统集合有查询权限
readWrite
非系统集合有查询和修改权限
数据库管理类
dbAdmin
数据库管理相关,比如索引管理,schema管理,统计收集等,不包括用户和角色管理
dbOwner
提供数据库管理,读写权限,用户和角色管理相关功能
userAdmin
提供数据库用户和角色管理相关功能
集群管理类
clusterAdmin
提供最大集群管理权限
clusterManager
提供集群管理和监控权限
clusterMonitor
提供对监控工具只读权限
hostManager
提供监控和管理severs权限
All-Database类
readAnyDatabase
提供读取所有数据库的权限除了local和config数据库之外
readWriteAnyDatabase
和readAnyDatabase一样,除了增加了写权限
userAdminAnyDatabase
管理用户所有数据库权限,单个数据库权限和userAdmin角色一样
dbAdminAnyDatabase
提供所有用户管理权限,除了local,config
超级用户类
root
数据库所有权限
内部角色
__system
提供数据库所有对象任何操作的权限,不能分配给用户,非常危险
七,备份和恢复类
backup
提供数据库备份权限
/usr/bin/mongodump --host 127.0.0.1 --port 27017 --db db--username admin --password password_url编码 --out /home/mongobackup/ --authenticationDatabase admin
restore
提供数据恢复权限