首页

8.2提高MongoDB的安全性

关灯 护眼    字体:

上一章 章节列表 下一章


MongoDB默认没有密码,且只有运行MongoDB电脑上的程序能够访问。实际上MongoDB也是可以设置远程访问的。但是一旦开启了外网访问,就一定要设置账号和密码,否则可能会导致安全隐患,甚至遭遇勒索敲诈。



8.2.1 配置权限管理机制


MongoDB默认没有账号和密码,只要连上了它就可以查询、修改、增加、删除任何内容。

为了增强MongoDB的安全性,需要配置基于角色的访问控制(Role-Based Access Control, RBAC)机制。

RBAC机制涉及三个关键定义:角色(Roles)、特权(Privileges)和用户(Users)。

● 特权是指一些资源和能够在资源上进行的操作。

● 一个角色可以有多种特权。

● 一个用户可以有被赋予不同的角色。

1.创建管理员用户

管理员用户的作用是创建其他用户。管理员用户本身不能对数据库进行控制。

在Linux或者macOS中,执行命令“mongo”打开MongoDB命令行客户端,如图8-8所示。

在Windows中,使用DOS命令进入MongoDB的bin文件夹下,然后执行命令“mongo.exe”来启动命令行客户端。

图8-8 MongoDB命令行客户端

在MongoDB命令行客户端中,执行以下命令来创建管理员用户。

代码8-11 在MongoDB命令行中创建管理员用户

其中,主要代码说明如下。

● 第1行代码:切换到admin数据库。admin数据库是MongoDB自带的数据库。

● 第3~9行代码:创建管理员,账号名称为 admin,密码为 kingnameisgenius,角色为userAdminAnyDatabase,控制的数据库为admin。

提示:

这里的写法有点像JavaScript的写法,每一个参数换行,但第3~9行其实本质上是一条命令。

运行效果如图8-9所示。

图8-9 切换到admin数据库并创建管理员

创建好管理员账户以后,在MongoDB命令行客户端中直接输入“exit”后按回车键,即可退出MongoDB命令行客户端。

修改第3章创建的配置文件mongodb.conf,添加如下两行内容:

效果如图8-10所示。

图8-10 启用权限管理功能

保存配置文件并重启MongoDB数据库。再次执行“mongo”命令,发现虽然能够连上数据库,但是已经不能执行常规操作了,如图8-11所示。

图8-11 启动权限管理以后直接使用命令行客户端已经不能正常操作了

要正常使用命令行客户端,必需把mongo的启动命令修改为:

mongo -u 'admin' -p 'kingnameisgenius' --authenticationDatabase 'admin'

启动以后发现可以正常执行常规操作了,如图8-12所示。

图8-12 带参数启动命令行客户端

2.创建普通用户

管理员账户是没有权限操作普通数据库的。要操作普通数据库,还需要创建普通用户。

使用管理员账户登录命令行客户端后,执行以下命令创建一个对chapter_8数据库有读写权限,对chapter_4只有读权限的普通用户。

代码8-12 在MongoDB命令行中创建普通用户

运行效果如图8-13所示。

图8-13 添加kingname用户

3.使用Robo 3T连接有账号的MongoDB

启动权限管理并添加账号以后,原来的Robo 3T已经不能正常连接MongoDB数据库了,如图8-14所示。此时,需要修改Robo 3T的连接设置。

图8-14 Robo 3T不能正常连接MongoDB

(1)在连接列表中,选中到本地 MongoDB 的链接,并单击“edit”链接(图中左上角),如图8-15所示。

图8-15 单击“edit”连接

(2)弹出连接设置对话框,切换至Authentication选项卡,勾选“Perform Authentication”复选框,填写被授权访问的数据库名,并填写用户名和密码,如图8-16所示。

图8-16 填写用户名和密码

(3)填写完成以后保存,就可以正常连接MongoDB了,如图8-17所示。

图8-17 kingname用户查看chapter_8数据库

4.创建能操作数据库的管理员用户

管理员(admin账号)能创建其他用户,看似权限非常大,但它不能访问任何一个数据库。所以,如果有必要,还需要创建一个能对所有数据库都有全部权限的用户。

(1)在 MongoDB 的命令行客户端中,使用管理员(admin)连接MongoDB,然后执行以下命令创建一个对所有数据库有完全控制权限的用户。

代码8-13 创建能操作数据库的管理员

(2)运行效果如图8-18所示。

图8-18 创建超级用户

(3)在robo 3T的连接设置中,使用root用户连接数据库,并把数据库设定为admin,如图8-19所示。

图8-19 使用root用户连接数据库

(4)连接以后发现可以操作所有数据库了,如图8-20所示。

提示:

能力越大责任越大,请慎重考虑是否有必要添加root用户。

图8-20 root用户可以操作所有数据库
<
m.qiduwx.com提示您,本章没有阅读完,点击下一页进入下一页阅读!

上一章 章节列表 下一章