在开发 web 应用程序时,安全性是至关重要的一点。当你希望用户能够注册、登录或在你的应用程序中执行其他操作时,你需要保证他们只能访问他们有权访问的信息。MongoDB 提供了一系列的安全性功能,其中包括用户身份验证和访问控制。在这篇文章中,我们将深入探讨如何在 MongoDB 中管理用户权限。
用户身份验证
MongoDB 允许你创建用户,在用户访问数据库时进行身份验证。在本文中,我们将使用 shell 中的用户管理来说明身份验证是如何工作的。
在使用身份验证之前,你需要创建至少一个用户并将其赋予适当的角色。以下是一个创建用户的示例:
db.createUser({ user: "admin", pwd: "admin", roles: ["root"] })
以上代码会创建一个名为 admin 的用户,并将其赋予 root 角色,即拥有所有数据库相关的超级管理员权限。你可以在创建时为用户分配其他权限,比如 read、write 等,这些权限可以针对一个数据库或集合等级。
注意:在生产环境下,你应该使用更强大的密码。
接下来,在使用身份验证之前,你需要启用它。可以使用以下命令启用身份验证:
mongod --auth
上面的命令是在启动 MongoDB 时使用的。或者,在运行实例后,你可以通过使用以下命令来启用身份验证:
db.getSiblingDB('admin').auth('admin', 'admin')
这将对 admin 用户进行身份验证并打开认证。
现在,我们来看看如何在身份验证的环境下访问数据库。
用户访问控制
MongoDB 允许你将用户分配给不同的角色,这些角色控制着他们在数据库中能够执行哪些操作。MongoDB 提供了几个内置的角色,包括 root、read、readWrite 等。你可以使用角色派生来创建自定义角色,并授予适当的权限。
一个典型的使用情形是将一个 read-only 用户分配给某些数据集。以下是一个创建 read-only 用户的示例:
use mydatabase db.createUser({ user: "readonly", pwd: "readonly", roles: [ { role: "read", db: "mydatabase" }] })
上面的代码将创建一个名为 readonly 的用户,并将其赋予 read 角色。我们还指定该用户仅能在 mydatabase 数据库中读取数据。
现在我们已经创建了一个只读用户,让我们来看一下他能做什么。要测试这个用户,请使用以下命令以只读用户身份连接到 MongoDB:
mongo --username readonly --password readonly --authenticationDatabase mydatabase
这会连接到 mydatabase 数据库,并授予只读用户只读权限。接下来,运行以下命令:
use mydatabase db.inventory.find()
以上命令将返回一个错误,因为只读用户没有写权限。使用以下命令作为可写用户重试:
use mydatabase db.inventory.insert({ item: "apple", qty: 50 })
这将添加一行数据到 inventory 集合中。然后,你可以通过读取 mydatabase 数据库并访问 inventory 集合来验证该操作是否成功:
use mydatabase db.inventory.find()
现在只读用户将能够返回一个包含了添加的新文档的结果集。
如何创建自定义角色
MongoDB 允许你创建自定义角色,以便更好地控制用户的访问。以下是一个自定义 read-write 角色的示例代码:
use mydatabase db.createRole({ role: "customReadWrite", privileges: [ { resource: { db: "mydatabase", collection: "" }, actions: [ "find", "insert" ] } ], roles: [] })
上面的代码将创建一个名为 customReadWrite 的新角色,并授予访问 mydatabase 数据库中所有集合的 find 和 insert 操作的权限。
你可以使用以下代码将角色分配给用户:
use mydatabase db.grantRolesToUser("myUser", ["customReadWrite"])
这将为名为 myUser 的用户分配 customReadWrite 角色的所有权限。
结论
MongoDB 提供了强大的安全性功能,其中包括用户身份验证和访问控制。为了保护你的 MongoDB 数据库及其相关的实用程序,你应该授予合适的角色给你的用户,并为每个用户分配访问控制列表,这样他们就只能访问他们有权访问的数据。在开发 MongoDB 时遵循这些最佳实践,将会大幅提高你的应用程序的安全性。
希望这篇文章能够帮助你更好地管理你的 MongoDB 用户权限,开发出更加安全的 web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f2441ba44b36ee57653775