MongoDB 用户名密码登陆

MongoDB 用户名密码登陆

96 kimoCHG 关注html

 1.9 2017.01.07 23:44* 字数 1014 阅读 58236评论 4喜欢 37mongodb

Mongodb enable authentication

MongoDB 默认直接链接,无须身份验证,若是当前机器能够公网访问,且不注意Mongodb 端口(默认 27017)的开放状态,那么Mongodb就会产生安全风险,被利用此配置漏洞,入侵数据库。数据库

容易遭受入侵的环境

  • 使用默认 mongod 命令启动 Mongodb
  • 机器能够被公网访问
  • 在公网上开放了 Mongodb 端口

安全风险

  • 数据库隐私泄露
  • 数据库被清空
  • 数据库运行缓慢

解决方案

1. 禁止公网访问 Mongodb 端口

1.1 网络配置

因为网络配置因人而异,须要根据本身实际环境进行配置,不做冗述。大体能够从如下方面禁止。安全

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

1.2 验证端口可否访问方式

在外网机器命令行中运行网络

telnet your.machine.open.ip 27017

2. 启用验证

2.1 建立用户管理员帐户

当前数据库版本:Mongodb 3.4函数

使用 mongod 启动数据库
新建终端ui

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

参数默承认以不加,如有自定义参数,才要加上,下同。spa

另起一个终端,运行下列命令命令行

mongo --port 27017

use admin

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

管理员建立成功,如今拥有了用户管理员
用户名:adminUser
密码:adminPass
而后,断开 mongodb 链接, 关闭数据库
两个终端下 <C - c>code

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。

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

use foo
db.auth("simpleUser", "simplePass")

use bar
show collections

还有一点须要注意,若是 admin 库没有任何用户的话,即便在其余数据库中建立了用户,启用身份验证,默认的链接方式依然会有超级权限

2.4 内建角色

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

2.5 URI 形式的访问

生产中经常使用 URI 形式对数据库进行链接

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

添加用户名密码验证

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

参考连接

结语

在使用数据库的过程当中,必定要注意安全风险,因为 Mongodb 的默认配置,使得数据库有入侵风险,应该予以防范。

没钱的点个喜欢,有钱的捧个钱场!

相关文章
相关标签/搜索