利用 MongoDB 内置的身份验证和授权方法

授权和身份验证是对理解数据库安全至关重要的两个概念. 这些两个概念是相似的,但重要的是要了解它们是什么,是什么使它们不同。 Authentication 是确认用户或客户端是否实际上是他们声称的人的过程。

身份验证

MongoDB 具有几种机制,允许您对用户进行身份验证,默认机制是其 Salted Challenge Response Authentication Mechanism (SCRAM)。 SCRAM 涉及 MongoDB 阅读和验证用户对其用户名、密码和身份验证数据库的组合的身份验证,所有这些都是给定的 MongoDB 实例所知道的。

您还可以使用文本文件作为一组连接的 MongoDB 实例的共享密码,例如复制集或碎片集群,这种方法被称为 keyfile authentication,被认为是最低限度的安全形式,最适合测试或开发环境,正如 MongoDB 文档所建议的。

对于实施碎片或复制的生产环境,MongoDB 文档建议使用另一种身份验证机制: x.509 身份验证。这涉及向预期集群成员或客户端分发有效的 x.509 证书,无论是自签或从第三方证书机构获得的证书,但这些证书与 keyfiles 不同,因为每个机器都获得了自己的专用 x.509 证书。

x.509 身份验证利用一个被称为 mutual authentication 的概念,这意味着当客户端或群集成员对服务器进行身份验证时,服务器也会对客户端或群集成员进行身份验证。

许可

MongoDB 通过一个名为 role-based access control 的计算机安全概念来管理授权。 每当您创建一个 MongoDB 用户时,您都有提供一个或多个 roles 的选项。

MongoDB 配备了一些内置的角色,在任何数据库中都提供常需要的权限。其中一些都适用于每个数据库,但大多数仅适用于admin数据库,因为它们旨在提供强大的管理权限。例如,您可以在任何数据库中分配给用户readWrite的角色,这意味着您可以在系统上的任何数据库中阅读和修改数据,只要您向用户授予了readWrite的角色。

除了其内置的角色外,Mongo还允许您定义自定义角色,为您提供更大的控制权,用户可以在您的系统上访问哪些资源。 与用户一样,角色被添加到特定数据库中。 除了在admin数据库中创建的角色之外,它可以包括系统中的任何数据库的特权,用户定义的角色的特权仅适用于该角色创建的数据库。

通过对用户权限进行精细控制,您可以设置专用用户来执行某些功能,例如集群管理员来管理复制集和分割集群,或者用户管理员来创建和管理用户和自定义角色。

相关资源

  • [如何在Ubuntu 20.04上保护MongoDB(https://andsky.com/tech/tutorials/how-to-secure-mongodb-on-ubuntu-20-04)
  • [如何在Ubuntu 20.04上配置MongoDB复制套件的密钥文件身份验证(https://andsky.com/tech/tutorials/how-to-configure-keyfile-authentication-for-mongodb-replica-sets-on-ubuntu-20-04) ]
Published At
Categories with 技术
comments powered by Disqus