美文网首页
MongoDB设置用户名和密码

MongoDB设置用户名和密码

作者: joyitsai | 来源:发表于2019-04-18 15:58 被阅读0次

    1. 禁止公网访问 Mongodb 端口

    1.1 网络配置

    由于网络配置因人而异,需要根据自己实际环境进行配置,不作冗述。大致可以从以下方面禁止。

    • 在路由器中关闭端口转发
    • 防火墙 iptables 禁止访问

    1.2 验证端口能否访问方式

    在外网机器命令行中运行

    telnet your.machine.open.ip 27017
    

    2. 启用验证

    2.1 创建用户管理员账户

    新建MongoDB服务:

    mongod --port 27017 --dbpath /data/db1
    
    

    开启mongodb客户端shell:

    mongo --port 27017
    
    use admin
    
    db.createUser(
      {
        user: "adminUser",
        pwd: "adminPass",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
    
    

    管理员创建成功,现在拥有了用户管理员
    用户名:adminUser
    密码:adminPass
    然后,断开 mongodb 连接, 关闭数据库

    2.2 Mongodb 用户验证登陆

    启动带访问控制的 Mongodb

    mongod --auth --port 27017 --dbpath /data/db1
    

    现在有两种方式进行用户身份的验证

    • 第一种 (类似 MySql)
      客户端连接时,指定用户名,密码,db名称
    mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
    
    • 第二种
      客户端连接后,再进行验证
    mongo --port 27017
    
    use admin
    db.auth("adminUser", "adminPass")
    // 输出 1 表示验证成功
    

    2.3 创建普通用户

    过程类似创建管理员账户,只是 role 有所不同

    use foo
    
    db.createUser(
      {
        user: "simpleUser",
        pwd: "simplePass",
        roles: [ { role: "readWrite", db: "foo" },
                 { role: "read", db: "bar" } ]
      }
    )
    
    

    现在我们有了一个普通用户
    用户名:simpleUser
    密码:simplePass
    权限:读写数据库 foo, 只读数据库 bar。

    注意
    use foo表示用户在 foo 库中创建,就一定要 foo 库验证身份,即用户的信息跟随随数据库。比如上述 simpleUser 虽然有 bar 库的读取权限,但是一定要先在 foo 库进行身份验证,直接访问会提示验证失败。

    use foo
    db.auth("simpleUser", "simplePass")
    
    use bar
    show collections
    

    2.4 内建角色

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

    相关文章

      网友评论

          本文标题:MongoDB设置用户名和密码

          本文链接:https://www.haomeiwen.com/subject/bkjtgqtx.html