zoukankan      html  css  js  c++  java
  • MongoDB用户认证和索引

    用户认证

    MongoDB默认是开启用户认证的,修改配置文件的authorization参数可以打开/关闭用户认证

    创建管理员

    
    > use admin
    switched to db admin
    > db.createUser({"user":"admin","pwd":"admin",roles:[{role:'userAdminAnyDatabase',db:'admin'}]})
    
    # 此用户只有创建用户和赋权的权限,不能在别的表定入数据
    
    
    

    创建普通用户

    use admin
    # 先用管理员登录
    db.auth("admin","admin")
    # 切换db,创建用户
    use mydb
    db.createUser({"user":"myuser","pwd":"mypwd",roles:[{role:'readWrite',db:'mydb'}]})
    
    # 在哪个表创建的用户,就要在哪个表登录,比如说刚刚没有切换到mydb这个db,就只能在admin中登录
    
    > use admin
    switched to db admin
    > db.createUser({"user":"myuser","pwd":"mypwd",roles:[{role:'readWrite',db:'mydb'}]})
    
    Successfully added user: {
            "user" : "myuser",
            "roles" : [
                    {
                            "role" : "readWrite",
                            "db" : "mydb"
                    }
            ]
    }
    >
    >
    > use mydb
    switched to db mydb
    >
    > db.auth("myuser","mypwd")
    Error: Authentication failed.
    0
    > use admin
    switched to db admin
    > db.auth("myuser","mypwd")
    1
    
    # 查看当前db中的用户
    >show uses
    
    # 查看admin库中的用户
    >db.system.users.find()
    
    

    数据库角色

    1. 内建的角色
    2. 数据库用户角色:read、readWrite;
    3. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    4. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    5. 备份恢复角色:backup、restore;
    6. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    7. 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
    8. 内部角色:__system

    索引

    索引的优点:

    1. 大大减少了服务器需要扫描的数据量;
    2. 索引可以帮助服务器避免排序或使用临时表;
    3. 索引可以将随机I/O转换顺序I/O;

    创建索引

    # 使用ensureIndex方法创建索引,key为创建索引的字段,1为升序创建索引,-1则是降序
    >db.collection_name.ensureIndex({KEY:1})
    
    # 复合索引
    >db.col.ensureIndex({"title":1,"name":-1})
    
    # 创建索引时,会引响数据写入时的性能,使用background参数让创建索引在后台执行
    >db.col.ensureIndex({"title":1,"name":-1},{background:true})
    
    # 分析查询语句是否使用索引
    >db.col.find("name":"xxxooo").explain()
    
  • 相关阅读:
    BZOJ1858[Scoi2010]序列操作 题解
    BZOJ3631[JLOI2014]松鼠的新家 题解
    BZOJ1036[ZJOI2008]树的统计Count 题解
    BZOJ1798[Ahoi2009]Seq 维护序列seq 题解
    BZOJ3212 Pku3468 A Simple Problem with Integers 题解
    BZOJ1012[JSOI2008]最大数maxnumber 题解
    洛谷P1080 国王游戏
    洛谷 P2296 寻找道路
    洛谷P1970 花匠
    洛谷 P1969 积木大赛
  • 原文地址:https://www.cnblogs.com/baitutu/p/7801273.html
Copyright © 2011-2022 走看看