七叶笔记 » 数据库 » 浅析MongoDB之安全认证

浅析MongoDB之安全认证

一、MongoDB的用户和角色权限简介

为了强制开启用户访问控制(用户验证),则需要在MongoDB实例启动时使用选项--auth或在指定启动配置文件中添加auth=true。

启用访问控制:MongoDB使用的是基于角色的访问控制(Role-Based Access Control,RBAC)来管理用户对实例的访问。通过对用户授予一个或多个角色来控制用户访问数据库资源的权限和数据库操作的权限,在对用户分配角色之前,用户无法访问实例。 角色:在MongoDB中通过角色对用户授予相应数据库资源的操作权限,每个角色当中的权限可以显示指定,也可以通过集成其他角色的权限,或者两者都存在的权限。 权限:权限由指定的数据库(resource)以及允许在运行资源上进行的操作(action)组成。资源(resource)包括:数据库、集合、部分集合和集群;操作(action)包括:对资源的增、删、改、查(CRUD)操作。

在角色定义时可以包含一个或多个已存在的角色,新创建的角色会继承包含的角色所有的权限。在同一个数据库中,新创建角色可以继承其他角色的权限,在admin数据库中创建的角色可以继承在其它任意数据库中的角色的权限。

角色权限的查看,可以通过如下的命令进行查看:

示例:

1.1、查看所有内置角色

1.2、常见的内置角色 数据库用户角色:read、readWrite 数据库管理角色:dbAdmin、dbOwner、userAdmin 集群管理角色:clusterAdmin、clusterManager、clusterMonitor 所有数据库用户角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 备份恢复角色:backup、restore 超级用户角色:root 内部角色:system

角色说明:

角色 权限描述 read 可以读取指定数据库中任何数据。 readWrite 可以读写指定数据库中任何数据,包括创建、重命名、删除集合 readAnyDatabase 可以读取所有数据库中任何数据(除了数据库config和local之外) readWriteAnyDatabase 可以读写所有数据库中任何数据(除了数据库config和local之外) userAdminAnyDatabase 可以在指定数据库创建和修改用户(除了数据库config和local之外) dbAdminAnyDatabase 可以读取任何数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作(除了数据库config和local之外) dbAdmin 可以读取指定数据库以及对数据库进行清理、修改、压缩、获取统计信息、执行检查等操作 userAdmin 可以在指定数据库创建和修改用户 clusterAdmin 可以对整个集群或数据库系统进行管理操作 backup 备份MongoDB数据最小的权限 restore 从备份文件中还原恢复MongoDB数据(除了system.profile集合)的权限 root 超级账户,超级权限

二、单实例环境

2.1、创建用户

创建用户格式如下:

示例:创建一个管理员账户

查看用户:

2.2、服务端开启认证

修改配置文件:

重启服务:

登陆测试:

添加一个普通用户:

创建普通用户可以在没有开启认证的时候添加,也可以在开启认证之后添加,但开启认证之后,必须使用有操作admin库的用户登录认证后才能操作。底层是将用户信息保存在了admin数据库的集合system.users中。

2.3、客户端登录认证

方法1

先连接,在认证:

方法2

连接时进行认证:

参数说明:

--host:连接的主机地址 --port:连接的端口 --authenticationDatabase:指定连接到哪个库。当登录是指定用户密码时,必须指定对应的数据库! -u:用户名 -p:密码

三、副本集环境

对于搭建好的mongodb副本集,为了安全,启动安全认证,使用账户密码登录。

对副本集执行访问控制需要配置两个方面:

1)副本集和共享集群的各个节点成员之间使用内部身份验证,可以使用秘钥文件或x.509证书。秘钥文件比较简单。

2)使用客户端连接到mongodb集群时,可开启访问授权。对于集群外部的访问。如通过可视化客户端、或者通过代码连接的时候,需要开启授权。

3.1、添加管理账户

在主节点添加管理账户,副本集会自动同步。

备注:

该步骤也可以在开启认证之后,但需要通过localhost登录才允许添加用户,用户数据也会自动同步到副本集。后续再创建其他用户,都已使用该超管用户创建。

3.2、创建副本集认证的key文件

生成一个key文件到当前文件夹中。

可以使用任何方法生成秘钥文件,例如,一下使用openssl生成密码文件,然后使用chmod来更改文件权限,仅为文件所有这提供读取权限。

备注:

所有副本集节点都必须使用同一份keyfile,一般在一台机器上生成,然后拷贝到其他机器上,且必须有读的权限,否则将来会报错:permissions on /mongodb/replica_sets/myrs_27017/mongo.keyfile are too open

一般情况下和配置文件放置在一起,方便查找。这里都copy到各个节点的配置文件目录

3.3、修改配置文件指定keyfile

分别编辑几个服务的mongod.conf文件,添加相关内容:

3.4、重启副本集

如果副本集是开启状态,则先分别关闭副本集中的每个mongod,从次节点开始。直到副本集的所有成员都离线,包括任何仲裁者。主节点必须是最后一个成员关闭,以避免潜在的回滚。

分别启动副本集:

查看进程情况:

3.5、连接测试

连接主节点测试:

先连接,再认证

连接时进行认证:

连接副本节点测试:

3.6、添加普通用户

添加普通用户对指定库有读写权限:

使用普通用户登录并查询数据:

以上就是浅析MongoDB之安全认证的详细内容,更多关于MongoDB 安全认证的资料请关注七叶笔记其它相关文章!

相关文章