开发者学堂课程【MongoDB精讲课程(下):安全认证简介】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/727/detail/12990
安全认证简介
一、MongoDB 的用户和角色权限简介
1.默认情况下,MongoDB 实例启动运行时是没有启用用户访问权限控制的,也就是说,在实例本机服务器上都可以随意连接到实例进行各种操作,MongoDB 不会对连接客户端进行用户验证,这是非常危险的。
mongodb 官网上说,为了能保障 mongcdb 的安全可以做以下几个步骤:
1)使用新的端口,默认的27017端口如果一旦知道了 ip 就能连接上,不太安全。
2)设置 moneodb 的网绝环境,最好将 mongodb 部署到公司服务器内网,这样外网是访问不到的。公司内部访问使用vpn等。
3)开启安全认证。认证要同时设置服务器之间的内部认证方式,同时要设置客户端连接到集群的账号密码认证方式。
为了强制开启用户访问控制(用户验证),则需要在 MongoDB 实例启动时使用选项--auth或在指定启动配置文件中添加选项 auth=true。
在开始之前需要了解一下概念
1)启用访问控制:
MoneoDB使用的是基干角色的访问控制 (Role-Based AccessControRBAC 来管理用户对实例的访问。通过对用户授予一个或多个角色来控制用户访问数据库资源的权限和数据库操作的权限,在对用户分配角色之前,用户无法访问实例。
在实例启动时添加选项--auth 或指定启动配置文件中添加选项 auth=true,
2)角色:
在 MongoDB 中通过角色对用户授予相应数据库资源的操作权限,每个角色当中的权限可以显式指定,也可以通过继承其他角色的权限,或者两都都存在的权限。分为
3) 权限:
权限由指定的数据库资源(rescurce)以及允许在指定资源上进行的操作(action)组成
1.资源(resource)包括:数据库、集合、部分集合和华群;
2.操作[action)包括:对资源进行的增、删、改、查(CRUD)操作。
在角色定义时可以包含一个或多个已存在的角色,新创建的角色会继承包含的角色所有的权限。在同一个数据库中,新创建角色可以继承其他角色的权限,在admin数据库中创建的角色可以继承在其它任意数据库中角色的权限。角色它分为这个内置权限和自定义角色,自定义的角色基本上在开发当中的很少去用,一般它内置的这些角色就已经够用够使了,看一下他内置的角色
//查询所有角色权限(仅用户自定义角色)
>db.runCommand({rolesInfo:1})
//查询所有角色权限(包含内置角色)
>db.runCommand({roesInfo:1,showBuiltinRoles:true})
// 查询当前数据库中的某角色的权限
> db.runconmand({ ro1esInfo:"<rolename>"})
//查询其它数据库中指定的角色权限
>db.runcommand({ ro1estnfo:{ role: "<rolename>",db:"<database>"} )
//查询多个角色权
>db.runcommand(
rolesinfo:[
"<rolename>"
{ role: "<ro1ename>",db:"<database>"}.
}
常用的内置角色:
数据库用户角色:readreadWrite;
所有数据库用户角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase
数据库管理角色:dbAdmin、dbOwner,userAdmin
集料管理角色:clusterAdmin、clusterManager、clusterMantor、hastManager
备份恢复角色:backup、restore;
超级用户角色:root
内部角色:system
2.角色说明
read:是一个比较小的权限,只能读但不能修改数据库,包括写等等都不可以。
Resdwrite:可以读写指定的数据库。包括创建、重命名、删除。
userAdmin:管理员用户,可以去修改用户包括对指定数据库的创建。
root:超级管理权限,权限非常大。
角色可以区分为两大类,一种是普通用户,只对数据库或数据库的读写操作有用处;一种是管理员角色,可以去管理我的用户、创建用户、修改用户。