MongoDB 设置用户名密码登陆

MongoDB 设置用户名密码登陆

2018年06月08日 10:22:47 Liu-YanLin 阅读数:16801mongodb

原文转载地址:https://blog.csdn.net/singgel/article/details/79407774数据库

 

Mongodb enable authentication

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

容易遭受入侵的环境

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

安全风险

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

解决方案

1. 禁止公网访问 Mongodb 端口

1.1 网络配置

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

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

1.2 验证端口可否访问方式

在外网机器命令行中运行函数

 
  1. telnet your.machine.open.ip 27017spa

  2.  

2. 启用验证

2.1 建立用户管理员帐户

当前数据库版本:Mongodb 3.4.net

使用 mongod 启动数据库
新建终端命令行

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

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

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

 
  1. mongo --port 27017

  2.  
  3. use admin

  4.  
  5. db.createUser(

  6. {

  7. user: "adminUser",

  8. pwd: "adminPass",

  9. roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]

  10. }

  11. )

  12.  

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

2.2 Mongodb 用户验证登录

启动带访问控制的 Mongodb
新建终端

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

如今有两种方式进行用户身份的验证
第一种 (相似 MySql)
客户端链接时,指定用户名,密码,db名称

mongo --port 27017 -u "lyl" -p "123456" --authenticationDatabase "admin"

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

 
  1. mongo --port 27017

  2.  
  3. use admin

  4. db.auth("adminUser", "adminPass")

  5.  
  6. // 输出 1 表示验证成功

  7.  

2.3 建立普通用户

过程相似建立管理员帐户,只是 role 有所不一样

 
  1. use foo

  2.  
  3. db.createUser(

  4. {

  5. user: "simpleUser",

  6. pwd: "simplePass",

  7. roles: [ { role: "readWrite", db: "foo" },

  8. { role: "read", db: "bar" } ]

  9. }

  10. )

  11.  

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

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

 
  1. use foo

  2. db.auth("simpleUser", "simplePass")

  3.  
  4. use bar

  5. 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 形式对数据库进行链接

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

  2.  

添加用户名密码验证

mongodb://simpleUser:simplePass@your.db.ip.address:27017/foomongodb://simpleUser:simplePass@your.db.ip.address:27017/foo
相关文章
相关标签/搜索