前篇我们知道了如果bind_ip设置为0.0.0.0, 那么所有ip都可以访问, 这是一个非常非常不好的行为, 常年有黑客广撒网肆意删库勒索, 也总是有人偷懒, 不对访问ip加以限制, 总有人中招, 黑客乐了. 总之, 数据的重要性不言而喻.
ps: 如果某一天你被勒索了, 请不要支付赎金, 黑客谎称可以恢复, 其实只是骗钱, 它们100%直接删库了.
提高安全性的三种方式:
- 身份认证
- 不允许远程访问
- 添加ip访问限制
常用权限
权限 |
说明 |
read |
允许用户读取数据库 |
readWrite |
允许用户读写指定数据库 |
userAdmin |
允许用户向system.users集合写入, 可以在指定数据库创建, 删除和管理用户 |
dbAdmin |
允许用户在指定数据库中执行管理函数或访问system.profile |
clusterAdmin |
必须在admin数据库中定义, 赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase |
必须在admin数据库中定义, 赋予用户所有数据库的读权限 |
readWriteAnyDatabase |
必须在admin数据库中定义, 赋予用户所有数据库的读写权限 |
userAdminAnyDatabase |
必须在admin数据库中定义, 赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase |
必须在admin数据库中定义, 赋予用户所有数据库的dbAdmin权限 |
root |
必须在admin数据库中定义, 超级账号, 超级权限 |
查看/创建用户
1 2 3 4 5
| use admin # 查看用户 show users # 用户信息是json格式 db.createUser(用户信息)
|
1 2 3 4 5 6 7 8 9 10 11 12
| db.createUser( { user:"uaad", pwd:"uaad", roles:[ { role:"userAdminAnyDatabase", db:"admin" } ] } )
|
添加认证
添加:
启动:
1 2
| mongod -f /etc/mongodb.conf mongo
|
1 2 3
| > use admin > show dbs # 此时会提示没有权限
|
验证:
1 2 3 4 5
| > db.auth( "uaad", "uaad" ) # 用户名 + 密码
|
更新用户
更新角色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| db.updateUser( "uaad", { "roles": [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" } ] } )
|
更改密码
1 2
| db.changeUserPassword("用户名", "新密码"); db.updateUser("用户名", {"pwd": "新密码"})
|
删除用户
注意: 需要使用狙有userAdmin或userAdminDatabase或root角色的用户才可以删除其他用户
Author:
Qin Peng
License:
Copyright (c) 2020 BY QPWLKQ LICENSE
Slogan:
每一个不曾起舞的日子, 都是对生命的辜负