• Docker Mongo数据库开启用户认证


    一、启动mongo容器的几种方式

    #简化版
    docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles
    
    
    #自定义mongo数据路径
    docker run --name mongo_rs1 -v ~/test/mongo_sr1:/mongodb -p 37117:27017 -d mongo mongod --logpath /mongodb/mongo.log  --logappend --dbpath /mongodb
    
    
    #开启mongo双主配置
    docker run --name mongo_rs2 -v ~/test/mongo_sr2:/mongodb -p 37118:27017 -d mongo mongod --logpath /mongodb/mongo.log  --logappend --dbpath /mongodb --master --slave --port=27017 --autoresync  --source=192.168.118.73:37117
    
    
    #常规,用mongo默认数据路径,并挂载出来
    docker run  --name mongodb_alpha -d --dns=192.168.1.26 -p 37017:27017 -v /home/devsa_dev/mongo_data/configdb:/data/configdb -v /home/devsa_dev/mongo_data/db:/data/db mongo

    而按照上述几种方式启动的Mongo容器,默认是不带密码访问的,也就是说,只有别人知道你的ip和映射出来的端口,即可操作你的mongo数据库

    二、如何开启mongo容器密码认证

    在运行时,增加--auth参数,用简化版来作为示例

    docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --auth

    三、关于mongo用户认证

    mongodb密码和传统数据如mysql等有些区别:

    1. mongodb的用户名和密码是基于特定数据库的,而不是基于整个系统的。所有所有数据库db都需要设置密码

    mongodb设置管理用户和密码:

    show dbs
    在mongodb新版本里并没有admin数据库,但是并不妨碍第2步操作。
    
    #进入admin数据库
    use admin 
    #创建管理员账户 db.createUser(
    { user: "useradmin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] }) mongodb中的用户是基于身份role的,该管理员账户的 role是 userAdminAnyDatabase。 ‘userAdmin’代表用户管理身份,’AnyDatabase’ 代表可以管理任何数据库。 #验证第3步用户添加是否成功 db.auth("useradmin", "adminpassword") 如果返回1,则表示成功。

    进入mongodb,用第3步的 管理员账户登录,用该账户创建其他数据库管理员账号

    use admin
    db.auth("useradmin", "adminpassword")

    新建你需要管理的mongodb 数据的账号密码

    use yourdatabase
    
    db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })

    注:dbOwner 代表数据库所有者角色,拥有最高该数据库最高权限。

    新建数据库读写账户

    use yourdatabase
    db.createUser({ user: "youruser2", pwd: "yourpassword2", roles: [{ role: "readWrite", db: "yourdatabase" }] })

    注:该用户用于该数据的读写,只拥有读写权限。

    内建角色

    • Read:允许用户读取指定数据库
    • readWrite:允许用户读写指定数据库
    • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
    • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
    • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
    • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
    • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
    • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
    • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
    • root:只在admin数据库中可用。超级账号,超级权限
     

    Mongodb 用户验证登陆

    第一种 (类似 MySql)

    客户端连接时,指定用户名,密码,db名称
    
    mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"

    第二种
    客户端连接后,再进行验证

    mongo --port 27017
    
    use admin
    db.auth("adminUser", "adminPass")
    // 输出 1 表示验证成功

    第三种:

    进入容器中
    mongo admin -u username -p passwd

    URI 形式的访问

    生产中常用 URI 形式对数据库进行连接

    mongodb://your.db.ip.address:27017/foo

    添加用户名密码验证

    mongodb://simpleUser:simplePass@your.db.ip.address:27017/foo

    实例:

    #形式一
    connect(host='mongodb://root:mongo@172.20.10.144:37017/ppmoney_website_minder') #形式二 connect(host='mongodb://root:mongo@172.20.10.144:37017/db?authSource=ppmoney_website_minder')

    四、实例演示

    啥?你还不会,那我接下来,给大家演示一下吧

    1、新建容器,并开启--auth

    docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --auth

    2、进入容器,操作

    #进入容器
    docker exec -it mongo1 bash
    
    #进入Mongo
    mongo
    
    #切库,新增用户
    use admin;
    
    db.createUser({ user: "root", pwd: "mongo", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })

    3、认证验证

    方式一,在mongo中可用db.auth()认证

    db.auth('root','mongo')

    方式二:退出mongo后,重新进入

    可以先直接mongo进入,然后show dbs,发现报错

    认证进入:mongo admin -u root -p mongo

    方式三:Robo客户端工具连接

    如果不认证,直接连接测试,提示失败

    认证后,重新测试连接:

    4、再来新建一个其它数据库的用户

    #新建库
    use ppmoney_website_minder
    
     
    #新建用户
    db.createUser(
    ... {
    ... user: "root",
    ... pwd: "mongo",
    ... roles: [ { role: "readWrite", db: "ppmoney_website_minder" }, ]
    ... }
    ... )
    
     
    #认证
    db.auth('root','mongo')
    
      
    #插入数据
    db.runoob.insert({"name":"ppmoney_website_minder"})

    用Mongo客户端连接验证:

    到此,就给大家演示了一下,如何对mong开启用户认证~ 

  • 相关阅读:
    js-监听网络状态
    call、apply、bind三者比较
    弹框滑动击穿问题
    Vue指令及自定义指令的使用
    vue-cli 运行打开浏览器
    递归判断多维数组中对象是否有值
    sync 修饰符在Vue中如何使用
    自定义组件 v-model 的使用
    Object.keys( )与 for in 区别
    mongodb 安装
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/9305748.html
Copyright © 2020-2023  润新知