zoukankan      html  css  js  c++  java
  • mongodb 系列 ~ mongo 用户验证系列

     

    MongoClientURI connectionString = new MongoClientURI("mongodb://root:****@dds-bp114e3f1fc441342.mongodb.rds.aliyuncs.com:3717,dds-bp114e3f1fc441341.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-677201"); // ****替换为root密码
    MongoClient client = new MongoClient(connectionString);
    MongoDatabase database = client.getDatabase("mydb");
    MongoCollection collection = database.getCollection("mycoll");
    

     

     

    一 基础
        1 mongodb本身启动是无认证的,是不安全的。
        2 mongodb的版本是3.X,3.X以前的版本授权方式不一样,请注意
        3 mongodb开启验证是需要消耗资源的,这点对于短链接尤为明显
    二 验证机制
       1 MONGODB-CR v3.0以下 
       2 SCRAM-SHA-1 v3.0以上mongodb
    三 研发建立模型
       一个spring 建立链接示例 
        spring.data.mongodb.uri=mongodb://root(userName):root(password)@localhost(ip地址):27017(端口号)/gis(collections/数据库)?authSource=admin&authMechanism=SCRAM-SHA-1
    四 如何创建用户认证
       1 mongodb启动参数添加auth
       2 函数介绍 
         1 函数 createUser 
           db.createUser( 
           {
          user: "username",
          pwd: "password",
          roles: [ { role: "role", db: "dbname" }, { role: "role", db: "dbname" },{ role: "role", db: "dbname" }]。
      3 Built-In Roles(内置常用角色):
         read:允许用户读取指定数据库 //必须切换到指定库建立
         readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 
         readwrite:允许用户读写指定数据库 //必须切换到指定库建立
         readwriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
         root:只在admin数据库中可用。超级账号,超级权限 // DBA账号
    五 常用命令
       背景 root用户 admin下进行
       1 db.system.users.find().pretty();//查看所有用户
       2 db.system.users.remove({user:""});//从当前数据库删除指定用户
       3 db.removeUser(username);//删除指定用户,对于所有DB
    六 分批存储用户
      1 对于 mongos集群,用户存储在全局admin库中
      2 对于 副本集集群,用户存储在各自primary的admin库中
        请记住,这两者之间的用户是不一样的

    七  用户验证相关问题     

    1 hive抽取验证集群相关问题
       1 需要指定config库只读 
         db.createUser({user:"XXX",pwd:"XX",roles:[{"role":"read","db":"ZZ"},{"role":"read","db":"config"}]})
       2 添加MongoDB的SplitVector命令实现并发数据迁移,授权给该用户
        添加角色:
        db.createRole({role: "hadoopSplitVector",privileges: [{resource: {db: "dbname",collection: "collection"},actions: ["splitVector"]}],roles:[]})
        //这里要注意,如果需要多个集合,都需要指出
      3 进行user更新
         db.updateUser("xxx",{roles: [{role:"read",db:"dbname"},{"role":"read","db":"config"},{role:"hadoopSplitVector", db:"dbname"}]})
    2 无法通过mongos创建用户
       报错 Error: couldn't add user: mongos specified a different config database string : stored 
       解决办法: 这时config三点已经处于不一致状态,需要同步config数据

    3 对于 SCRAM-SHA-1 引起的性能消耗问题

       分析 对于验证导致性能消耗问题比较严重的大多在于PHP的场景,频繁短链接的断开与建立,每次都需要验证,验证消耗性能

         解决办法: 

       1   client : authMechanism='MONGODB-CR'(未验证)

       2   采用连接池 或者去掉短链接

     
     
  • 相关阅读:
    [日常训练]大灾难
    [cf235D]Graph Game
    [日常训练]选课
    [日常训练]挂科
    [学习笔记]概率&期望
    [日常训练]yayamao的神题
    [学习笔记]原根
    LOJ#2132. 「NOI2015」荷马史诗
    LOJ#2131. 「NOI2015」寿司晚宴
    LOJ#2129. 「NOI2015」程序自动分析
  • 原文地址:https://www.cnblogs.com/williamjie/p/11454058.html
Copyright © 2011-2022 走看看