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   采用连接池 或者去掉短链接

     
     
  • 相关阅读:
    CF 142B Tprimes
    CF 231A Team
    poj 2001 Shortest Prefixes ——字典树入门
    hdu 1039 Easier Done Than Said?
    poj 2528 Mayor's posters
    hdu 1061 Rightmost Digit
    poj 2503 Babelfish
    CF271 A. Beautiful Year
    poj 2752
    CF271 B. Prime Matrix
  • 原文地址:https://www.cnblogs.com/williamjie/p/11454058.html
Copyright © 2011-2022 走看看