• mongodb用户权限管理的CRUD


    https://blog.csdn.net/weixin_34332905/article/details/88759759?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

    1.进入MongoDB

    我用的是navicat

    2.切换到admin数据库

    use admin

    3.创建admin管理员用户

    指定用户的角色和数据库:

    (注意此时添加的用户都只用于admin数据库,而非你存储业务数据的数据库)

    (在cmd中敲多行代码时,直接敲回车换行,最后以分号首尾)

    use admin;

    db.createUser(
    {
    user: "hanby",
    customData: {
    description: "superuser"
    },
    pwd: "123456",
    roles: [{
    role: "userAdminAnyDatabase",
    db: "admin"
    }]
    }
    );

    user字段,为新用户的名字;

    pwd字段,用户的密码;

    cusomData字段,为任意内容,例如可以为用户全名介绍;

    roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在roles字段,可以指定内置角色和用户定义的角色。

    超级用户的role有两种,userAdmin或者userAdminAnyDatabase(比前一种多加了对所有数据库的访问,仅仅是访问而已)。

    db是指定数据库的名字,admin是管理数据库。

    不能用admin数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库admin数据库,也只能查看admin数据库中创建的用户。

    4、创建一个不受访问限制的超级用户

    (跳出三界之外,不在五行之中,暂时未用)

    db.createUser(

    {

    user:"root",

    pwd:"pwd",

    roles:["root"]

    }

    );

    5、创建一个业务数据库管理员用户

    (只负责某一个或几个数据库的増查改删)

     db.createUser({

    user:"hanby",

    pwd:"123456",

    customData:{

    name:'xxxx',

    email:'******@qq.com',

    age:18,

    },

    roles:[

    {role:"readWrite",db:"db001"},

    {role:"readWrite",db:"db002"},

    'read'// 对其他数据库有只读权限,对db01、db02是读写权限

    ]

    })

    数据库用户角色:read、readWrite;

    数据库管理角色:dbAdmin、dbOwner、userAdmin;

    集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;

    备份恢复角色:backup、restore;

    所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

    超级用户角色:root

    内部角色:__system

    Read:允许用户读取指定数据库

    readWrite:允许用户读写指定数据库

    dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

    userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户

    clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

    readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

    readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

    userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

    dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

    root:只在admin数据库中可用。超级账号,超级权限

    6、查看创建的用户

    show users;//显示不出来....

    db.system.users.find();

    db.runCommand({usersInfo:"userName"});//显示不出来....

    db.system.users.find().pretty();

    7、修改密码
    use admin
    db.changeUserPassword("username", "xxx")
    8、修改密码和用户信息
    db.runCommand(
    {
    updateUser:"username",
    pwd:"xxx",
    customData:{title:"xxx"}
    }
    )
    重要的一步
    启用权限验证(别TM的武装了大半天,大门还一直开着,还抱怨我方防御塔怎么一直被摧毁)
    mongo --auth
    或者修改mongo.conf,最后一行添加

    #启用权限访问
    auth=true

    10、删除用户

    use admin;

    db.dropUser("hanby");

    db.system.users.find().pretty();

     

    要删除特定业务数据库管理员用户,比如第五步创建的用户,上面的删除不行

    db.system.users.find().pretty();

    db.dropUser("root");

     

     应该先进入特定的数据库再去删除

    use test;

    db.dropUser("root");

     查看

    use admin;
    db.system.users.find().pretty();

    9、重新启动mongodb
    net stop mongodb;
    net start mongodb;
    和用户管理相关的操作基本都要在admin数据库下运行,要先use admin;
    如果在某个单一的数据库下,那只能对当前数据库的权限进行操作;
    db.addUser是老版本的操作,现在版本也还能继续使用,创建出来的user是带有root role的超级管理员。

    纵有白头俱老意,奈何缘浅路芊芊.
  • 相关阅读:
    msbuild error
    windows 切换 默认 jdk 版本
    CI MSBuild env 2
    CI MSBuild env 1
    mstsc 修改密码
    MVC MSBuild
    gitolite
    OpenCV Visual Studio
    程序员!这5种让人郁闷的程序注释方式千万要避开!
    C语言基础丨运算符之条件运算符(七)
  • 原文地址:https://www.cnblogs.com/hanby/p/15378470.html
Copyright © 2020-2023  润新知