开启MongoDB认证:安全性极大提升

1. MongoDB 简介

MongoDB 是一种 NoSQL 数据库,在大数据领域中使用非常广泛。相比传统的关系型数据库,MongoDB 不依赖表间关系,而是将数据存储在一个叫做文档的数据库对象中。

在 MongoDB 中,每个文档都是一个由键值对组成的 Bson 对象。相比于关系型数据库,文档更具有灵活性,并且能更自然地映射到面向对象的思路中。

2. MongoDB 的权限控制

在传统的关系型数据库中,权限控制是由各种用户与用户组、授权和访问级别等多种限制方法等叠加起来实现的,但在 MongoDB 中,采用的是更简单但不失安全性的权限控制机制。

MongoDB 在版本 2.6 中增加了用户身份验证和角色管理功能,这些功能可以有效保障数据库的安全性。

2.1 用户身份验证

在 MongoDB 中,所有用户都必须进行身份验证才能访问数据库。MongoDB 支持多种身份验证方式,例如:

用户名和密码

X.509 证书

其中,最常用的是用户名和密码方式。需要创建一个管理员用户以及其他用户账号,并配置密码。

2.2 角色管理

角色是 MongoDB 中权限控制机制的核心。MongoDB 支持多种不同的角色,例如:

root:拥有所有权限,并且可以创建其他用户、修改其他用户权限、删除其他用户等。

userAdmin:拥有创建用户、修改用户账号和权限等操作的权限。

readWrite:拥有读写数据库的权限。

可以根据实际需要创建不同的角色,并将其授予不同用户。

3. 开启 MongoDB 认证

默认情况下,MongoDB 是不开启身份验证机制的,每个人都可以直接连接到数据库。这对于开发和测试环境是非常方便的,但在生产环境中,我们必须开启身份验证机制。下面是开启 MongoDB 认证的步骤:

3.1 创建管理员账号

首先,需要用管理员账号连接到 MongoDB。默认情况下,MongoDB 中的管理员账号是 root,在连接到 MongoDB 后,切换到 admin 数据库并创建管理员用户。

# 连接到 MongoDB

$ mongo

# 切换到 admin 数据库

> use admin

# 创建管理员用户

> db.createUser({user: "admin", pwd: "password", roles: ["root"]})

这样就创建了一个名为 admin 的管理员账号,密码是 password

3.2 开启认证方式

在管理员账号创建成功后,需要在 MongoDB 配置文件中将认证方式设置为 “有凭证模式”,同时将管理员账号信息添加到配置中。

打开 MongoDB 配置文件 /etc/mongod.conf,将以下代码添加到文件末尾:

security:

authorization: enabled

然后,重启 MongoDB 服务:

$ sudo service mongod restart

4. 使用已认证的 MongoDB 实例

在启用了身份验证的 MongoDB 中,需要使用已授权的用户才能访问数据库。例如,使用 admin 账号登录:

$ mongo -u admin -p password --authenticationDatabase admin

需要注意的是,authenticationDatabase 参数必须指定为 admin,因为 admin 数据库是存储用户账号信息的库。

现在,只有已通过身份验证的用户才能访问数据库。如果没有通过身份验证的用户尝试连接到数据库,则会出现以下错误提示:

$ mongo MongoDB shell version v4.2.8

connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb

2021-08-02T18:40:44.645+0800 E QUERY [js] Error: Authentication failed. :

connect@src/mongo/shell/mongo.js:341:17

@(connect):2:6

2021-08-02T18:40:44.645+0800 F - [main] exception: connect failed

2021-08-02T18:40:44.646+0800 E - [main] exiting with code 1

5. 总结

开启 MongoDB 认证可以显著提高数据库的安全性。在生产环境中,务必开启身份验证并进行严格的权限控制,以保护数据不被未经授权的人员访问和修改。另外,在 MongoDB 中,还可以使用访问控制列表(ACL)和TLS/SSL 等功能提高数据库的安全性。

数据库标签