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 等功能提高数据库的安全性。