开启权限认证
系统不管设计的多么完善,总有一些漏洞在里面
mongodb安全概览
1、最安全的时物理隔离:不现实 通过任何手段都不能连接我们的主机,只有一些重要的数据,会物理隔离到机房中 2、网络隔离:比较安全,无法碰到漏洞,即使有漏洞,也不会有机会利用它 我们知道很多公司,他们的开发机,测试机,都在自己的内网环境中,外部的人时进不去的,这是第二层次的隔离 3、防火墙 配置,只允许某些ip去连接我的mongodb,也能从一定程度上防范 4、用户名密码:现实 从安全来讲,次于以上3个,因为用户能够通过用户名密码来连接服务器的时候,说明能够正常的通信,如果用户名密码不是特别的复杂,就有可能被用户尝试出来
之前使用mongodb时,并没有使用用户名密码,但还是自动连接上了,默认情况下,mongodb并没有为自己开启权限认证,开启权限认证有两种方法
1、auth开启
2、keyfile开启
auth开启
在启动时,在配置里面 auth = true 开启权限认证,再重启mongodb
./bin/mongo 127.0.0.1:12345 MongoDB shell version v4.0.0 connecting to: mongodb://127.0.0.1:12345/test MongoDB server version: 4.0.0
依然可以链接上,是因为还没有创建用户,我们再开启了认证并创建了用户之后,不使用用户名密码就连不上了
创建用户
1、创建语法:createUser(2.6之前为addUser)
{ user:"<name>", pwd:'<cleartext password>', customData:{<any information>},//对这个用户名密码对说明 roles:[{role:'<role>',db:'<dababase>'}]//这个用户的类型 }
roles,角色类型有好几种,mongodb自己内建了几种类型
read:对指定的db上做读取操作,像find
readWrite:除了读取操作外,还有写入的操作,比如insert, update,但不能创建索引,删除索引,创建数据库等
dbAdmin:对这个db提供了一些管理权限,除了读取之外的其他操作,比如转换数据库类型
dbOwner:是read,readWrite,dbAdmin的集合体,他拥有这三个权限的所有权限
userAdmin:拥有这个权限的角色,可以对其他角色进行管理
除了这些内建角色之外,还可以自定义一些角色,比如将一些小角色进行组合,比如可以find,insert但不能 update的权限
创建用户名密码
> db.createUser({user:'123',pwd:'123',customData:'test'})
登录
./bin/mongo 127.0.0.1:12345 -u 123 -p 123