kimoCHG 关注html
1.9 2017.01.07 23:44* 字数 1014 阅读 58236评论 4喜欢 37mongodb
MongoDB 默认直接链接,无须身份验证,若是当前机器能够公网访问,且不注意Mongodb 端口(默认 27017)的开放状态,那么Mongodb就会产生安全风险,被利用此配置漏洞,入侵数据库。数据库
因为网络配置因人而异,须要根据本身实际环境进行配置,不做冗述。大体能够从如下方面禁止。安全
在外网机器命令行中运行网络
telnet your.machine.open.ip 27017
当前数据库版本: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
启动带访问控制的 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 表示验证成功
过程相似建立管理员帐户,只是 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 库没有任何用户的话,即便在其余数据库中建立了用户,启用身份验证,默认的链接方式依然会有超级权限
生产中经常使用 URI 形式对数据库进行链接
mongodb://your.db.ip.address:27017/foo
添加用户名密码验证
mongodb://simpleUser:simplePass@your.db.ip.address:27017/foo
在使用数据库的过程当中,必定要注意安全风险,因为 Mongodb 的默认配置,使得数据库有入侵风险,应该予以防范。
没钱的点个喜欢,有钱的捧个钱场!