centos7赋予全部权限_mongodb:权限控制

4b2528bf94f449260fb7e3a37d20ba4b.png

最近网上很多mongodb被黑,使大家将目光投向了mongodb的权限控制。当然mongodb本身有一套完备的RBAC权限控制体系,这次被黑应该都是没有遵照mongodb的生产环境部署手册部署的结果。我们平时玩一玩mongodb习惯了不设置用户名密码,当我们的数据库放到公网时,由于我们也没有设置用户名密码,任何人都可以随便访问,而且由于我们没有开启授权访问,使得任何登录到mongodb服务器的用户都拥有最高权限。这样被那些居心不良的人发现,就可以把我们的数据拷走,删除我们的数据库,从而勒索赎金。即使我们的数据库只能在内网访问,我们也应该开启权限控制,这样可以避免我们内部用户的一些误操作,或者我们对外服务的程序有一些漏洞也说不准。

上面我们说了,mongodb是基于RBAC权限模型来实现权限控制的。那么我们先简单了解一下RBAC权限模型。RBAC(Role-Based Access Control) 认为授权就是“Who对What进行How的操作”。也就是说,我们通过给角色授权,然后将该角色授给某个用户,这样这个用户就拥有了该角色所拥有的所有权利。所以为了帮助我们更好的管理数据库mongodb内置了很多的角色。常用的有:

  • read: 只能读取指定数据库
  • readWrite: 能读写指定数据库
  • dbAdmin: 能执行管理函数,如索引创建、删除,查看统计或访问 system.profile
  • dbOwner: 对当前数据库有全部权限
  • userAdmin: 能创建、删除和管理用户
  • clusterAdmin: 只能在 admin 数据库中可用,能赋予用户所有分片和复制集相关函数的管理权限
  • readAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的读权限
  • readWriteAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的读写权限
  • userAdminAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的 userAdmin 权限
  • dbAdminAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的 dbAdmin 权限
  • root: 只能在 admin 数据库中可用。超级权限

每一种类型包括哪些角色,以及每一个角色包括哪些可执行的操作,在mongodb的文档上都有详细的说明我们就不一一翻译了,你可以参考该文档 Built-In Roles - MongoDB Manual 3.4 。 如果这些内置的角色还无法满足你的要求你可以自定义一个自己的角色,同样你可以参考该文档 User-Defined Roles 。

下面我们通过一个简单的例子来快速设置我们的权限控制。下面的例子基于mongodb 3.2 。首先我们需要一个有grant权限的账号,于是我们以关闭auth的方式启动我们的mongodb:

mongod 

有了grant 权限的账号后,我们就可以,以auth的方式启动我们的mongodb

// 

启动后,如果我们还是直接以 mogo 连接数据库,连上后我们做一些操作会报错比如我们简单的执行一个 show dbs:

e40e1c69c27cf97fad9d8efc5e30daae.png

这时我们就需要授权,我们可以通过 db.auth("anydbuser","anydbuser"); 来授权。注意我们需要切换到 admin 数据库后再使用该语句授权,因为我们的用户是在 admin 数据库上创建的。或者我们可以通过下面的这种方式来连接我们的mongodb:

mongo 

有了这个用户之后,我们就可以为其它数据库创建一些用户。注意,我们想要为哪个数据库创建用户,我们最好先切换到该数据库,否则我们授权时还要先切换到我们创建用户时的数据库,这样会给我们带来不必要的麻烦,和管理上的混乱。

// 

用该用户,我们可以做一些查询的操作,当插入数据时会报错

b589b026dad8397efe4b098183f1a4ef.png
// 

使用readWriteUser用户我们可以实现增删改查的操作,以及对索引的一些操作。当然使用该用户是无法添加新的用户的:

1b238e6294dff22691067ef10fd8e7c6.png

这时我们就需要创建一个拥有 Database Administration Roles 类型中包含的角色比如 dbOwner或userAdmin角色。过程是一样的我们就不在列举了,大家自行操作吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值