zoukankan      html  css  js  c++  java
  • MongoDb分片集群认证

    本文主要基于已经搭建好的未认证集群,结合上篇Mongodb副本集分片集群模式环境部署(https://www.cnblogs.com/woxingwoxue/p/9875878.html), MongoDb分片集群认证几个主要流程

    1.在分片集群环境中,副本集内成员之间需要用keyFile认证,mongos与配置服务器,副本集之间也要keyFile认证,集群所有mongod和mongos实例使用内容相同的keyFile文件
    (1)在其中一台机器上生成keyfile

    openssl rand -base64 753  > keyfile
    sudo chmod 400 keyfile

    (2)将keyfile放置在<path-to-keyfilie>路径

    2.建立管理员账号,赋所有权限(admin和config数据库)

    use admin
    db.createUser({user: "admin",pwd: "123456",roles: [ { role: "root", db: "admin" } ]}) #root所有权限
    db.auth("admin","123456")
    
    use config
    db.createUser({user: "admin",pwd: "123456",roles: [ { role: "root", db: "admin" } ]}) #root所有权限
    db.auth("admin","123456")

    3.关闭所有mongod、mongos、configsvr,编辑配置文件,重新启动每台服务器每个实例

    为每一个mongod、mongos、配置服务器的实例其中的配置文件添加认证属性或者在启动实例时添加--authorization、--keyFile选项

    [mongo@mongo3 ~]$ vi services/configsvr/mongod.conf
    #mongod.conf 添加以下配置
    security:
        authorization: enabled  #若启动实例报错,可删除该行
        keyFile: /home/mongo/services/keyfile
    [mongo@mongo3 ~]$ ./mongod -f services/configsvr/mongod.conf 

    其他实例如下

    [mongo@mongo3 ~]$ vi services/shard1/mongod.conf
    
    #mongod.conf 添加以下配置
    security:
        authorization: enabled  #若启动实例报错,可删除该行
        keyFile: /home/mongo/services/keyfile
        
    [mongo@mongo3 ~]$ ./mongod -f services/shard1/mongod.conf
    
    [mongo@mongo1 ~]$ vi services/shard2/mongod.conf
    
    #mongod.conf 添加以下配置
    security:
        authorization: enabled  #若启动实例报错,可删除该行
        keyFile: /home/mongo/services/keyfile
        
    [mongo@mongo1 ~]$ ./mongod -f services/shard2/mongod.conf
    
    [mongo@mongo1 ~]$ vi services/shard3/mongod.conf
    
    #mongod.conf 添加以下配置
    security:
        authorization: enabled  #若启动实例报错,可删除该行
        keyFile: /home/mongo/services/keyfile
        
    [mongo@mongo1 ~]$ ./mongod -f services/shard3/mongod.conf
    
    [mongo@mongo2 ~]$ vi services/mongos/mongos.conf
    
    #mongod.conf 添加以下配置
    security:
        authorization: enabled  #若启动实例报错,可删除该行
        keyFile: /home/mongo/services/keyfile
        
    [mongo@mongo2 ~]$ ./mongos -f services/mongos/mongos.conf

    4.admin连接mongo集群

    [mongo@mongo3 ~]$ ./mongo 172.16.0.192:27017/admin -u admin -p 123456

    5.为指定数据库添加访问用户,本文为testShard数据库

    use testShard
    db.createUser(
        {
            user:"test",
            pwd:"test",
            roles:[
                {role:"readWrite", db:"testShard"} #读写权限
            ]
        }
    )
    db.auth("test","test")

    6.test访问mongo集群,只有testShard的数据读写权限

    [mongo@mongo3 ~]$ ./mongo 172.16.0.192:27017/testShard -u test -p test
    MongoDB shell version v4.0.3
    connecting to: mongodb://172.16.0.192:27017/testShard
    Implicit session: session { "id" : UUID("e0f8bf3f-83d7-432c-ba4c-c063d865380e") }
    MongoDB server version: 4.0.3

    用户和角色方法
    详细参见官方文档:
    https://docs.mongodb.com/manual/reference/method/#role-management

    查看角色信息
    use admin
    db.getRole("rolename",{showPrivileges:true})

    删除角色
    use admin
    db.dropRole("rolename")

    系统内置用户角色
    大部分内置的角色对所有数据库共用,少部分仅对admin生效

    数据库用户类

    read
    非系统集合有查询权限

    readWrite
    非系统集合有查询和修改权限

    数据库管理类

    dbAdmin
    数据库管理相关,比如索引管理,schema管理,统计收集等,不包括用户和角色管理

    dbOwner
    提供数据库管理,读写权限,用户和角色管理相关功能

    userAdmin
    提供数据库用户和角色管理相关功能

    集群管理类

    clusterAdmin
    提供最大集群管理权限

    clusterManager
    提供集群管理和监控权限

    clusterMonitor
    提供对监控工具只读权限

    hostManager
    提供监控和管理severs权限

    备份和恢复类

    backup
    提供数据库备份权限
    restore
    提供数据恢复权限

    All-Database类

    readAnyDatabase
    提供读取所有数据库的权限除了local和config数据库之外

    readWriteAnyDatabase
    和readAnyDatabase一样,除了增加了写权限

    userAdminAnyDatabase
    管理用户所有数据库权限,单个数据库权限和userAdmin角色一样

    dbAdminAnyDatabase
    提供所有用户管理权限,除了local,config


    超级用户类

    root
    数据库所有权限

    内部角色

    __system
    提供数据库所有对象任何操作的权限,不能分配给用户,非常危险

  • 相关阅读:
    Linux用过的命令集合
    Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十一集之安装FastDFS】
    Linux常见目录的作用
    Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十集之Nginx反向代理原理】(有参考其他文章)
    Python socket编程之三:模拟数据库循环发布数据
    Python socket编程之二:【struct.pack】&【struct.unpack】
    Python socket编程之一:
    分时图设计
    统计一段时期内股票的涨幅情况
    iOS开发之手势识别汇总
  • 原文地址:https://www.cnblogs.com/woxingwoxue/p/9888897.html
Copyright © 2011-2022 走看看