MongoDB之安全

1.  mongodb安全架构

    

2.  认证

    1.  认证方式

        

    2.  集群节点认证

                       

3.  鉴权

    基于角色的权限控制,不同的权限的用户对数据库的操作不同

    1.  用户角色

    2.  用户管理

    3.  内置角色与权限继承关系

        

4.  审计

    MongoDB企业版包含针对mongod和mongos实例的审计功能

    1.  审计功能使管理员和用户可以跟踪具有多个用户和多个客户端应用的mongodb的运行情况

    2.  审计功能将审计事件写入console,syslog,JSON文件或BSON文件

    3.  审计系统记录的操作:

        DDL

        DML

        认证和授权

        副本集集群和分片集群

5.  加密

    

 

 

    

    

  

6.  MongoDB安全最佳实践

    1.  启用身份验证

        1.  命令行方式启动

            mongod --auth --port 27017 --dbpath /data/db

        2.  配置文件           

            security:
              authorization: enabled

        3.  在启用身份证之前,先创建一个用户

            db.createUser({user:"root",pwd:"root",roles:[{"role":"userAdmin","db":"admin"},{"role":"root","db":"admin"},{"role":"userAdminAnyDatabase","db":"admin"}]})

        4.  启用身份验证,使用root进行登录  

 

            mongo -uroot -p root 172.16.1.100:16535/admin  

            mongo -uroot -proot 172.16.1.100:16535 --authenticationDatabase admin                           

    2.  权限控制

        不同账号不同权限

        最小权限

        1.  创建一个写用户

            db.createUser({user:"writer",pwd:"123",roles:[{"role":"readWrite","db":"yangjianbo"}]})

        2.  创建一个读用户

            db.createUser({user:"reader",pwd:"123",roles:[{"role":"read","db":"yangjianbo"}]})

    3.  加密和审计

    4.  网络和操作系统加固

        使用专门的用户运行MongoDB

        防火墙限制规则

        绑定ip

        修改端口

        关闭http接口

        关闭Rest API接口

    5.  遵循安全准则

6.  用户管理

    1.  用户角色

数据库用户角色
read:允许用户读取指定的数据库
readWrite:允许用户读写指定数据库
数据库管理角色
dbAdmin:允许用户在指定数据库执行管理函数,创建索引,删除索引,查看统计.
userAdmin:允许用户向system.users集合写入,可以在指定数据库创建删除管理账号
dbOwner:指定数据库最大的权限,是readWrite+dbAdmin+userAdmin的和。
群集管理角色(只在admin数据库可用)
clusterAdmin:用户所有分片和复制集相关函数的管理权限
clusterManager:管理和监控群集。
clusterMonitor:只能访问监控工具。
hostManager:监视和管理。
备份和还原角色
backup
restore
所有角色(只在admin数据库可用)
readAnyDatabase:赋予用户所有数据库的读权限
readWriteAnyDatabase:赋予用户所有数据库的读写权限
userAdminAnyDatabase:赋予所有数据库的useradmin权限
dbAdminAnyDatabase:赋予所有数据库的dbadmin权限。
超级角色(只在admin可用)
root:超级账号,超级权限

    2.  创建用户

db.createUser(
{
user:  "productuser",
pwd:  "Cmr2017",
roles:  [ { role: "readWrite", db: "product" } ]
}
)      

    3.  删除用户

        db.dropUser('productuser')

    4.  修改用户密码

        db.changeUserPassword("reader","123456")  

    5.  修改用户角色

        db.updateUser("reader",{roles:[{role:"dbOwner",db:"yangjianbo"}]}) 

posted @ 2022-09-02 18:01  奋斗史  阅读(97)  评论(0)    收藏  举报