如何通过MongoDB用户角色实现单实例的授权登录?
摘要:现代数据库系统能够存储和处理大量数据。因此,由任何一个用户单独负责处理与管理数据库相关的所有活动的情况相对较少。通常,不同的数据库用户需要对数据库的某些部分具有不同级别的访问权限:某些用户可能只需要读取特定数据库中的数据,而其他用户则必须能
现代数据库系统能够存储和处理大量数据。因此,由任何一个用户单独负责处理与管理数据库相关的所有活动的情况相对较少。通常,不同的数据库用户需要对数据库的某些部分具有不同级别的访问权限:某些用户可能只需要读取特定数据库中的数据,而其他用户则必须能够插入新文档或修改现有文档。同样,应用程序可能需要独特的权限,仅允许其访问其运行所需的数据库部分。
MongoDB采用强大的机制来控制对数据库系统的访问和权限,称为基于角色的访问控制(RBAC)。在本文中,您将了解RBAC的工作原理、最小权限原则的含义和目的,以及如何在实践中使用 MongoDB 的访问权限功能。
访问控制(也称为授权)是一种安全技术,涉及确定谁可以访问哪些资源。
为了更好地理解 MongoDB 中的访问控制,首先将其与另一个不同但密切相关的概念进行区分:身份验证。身份验证是确认用户或客户端是否确实是他们声称的身份的过程。另一方面,授权涉及为给定用户或用户组设置规则,以定义他们可以执行哪些操作以及他们可以访问哪些资源。
MongoDB 中的身份验证
在许多数据库管理系统中,用户仅通过用户名和密码对进行识别。当使用有效凭据连接到数据库时,用户将经过身份验证并被授予与该用户关联的访问级别。在这种方法中,用户目录是扁平的,这意味着对于整个数据库服务器,每个用户名必须是唯一的。
相比之下,MongoDB 采用更复杂的用户目录结构。在 MongoDB 中,用户不仅可以通过用户名来识别,还可以通过创建用户的数据库来识别。对于每个用户,创建他们的数据库称为该用户的身份验证数据库。
这意味着在 MongoDB 中,可以有多个用户具有相同的用户名(例如sammy),只要它们是在不同的身份验证数据库中创建的。要以用户身份进行身份验证,您不仅必须提供用户名和密码,还必须提供与该用户关联的身份验证数据库的名称。
人们可能会假设在给定身份验证数据库中创建的用户将具有仅对该特定数据库可用的访问权限,但事实并非如此。每个用户,无论是在哪个身份验证数据库中创建的,都可以具有跨不同数据库分配的权限。
MongoDB 中的授权(基于角色的访问控制)
在 MongoDB 中,您可以通过称为基于角色的访问控制(通常缩写为RBAC)的机制来控制谁有权访问数据库上的哪些资源以及访问的程度。
在基于角色的访问控制中,用户无权直接对资源执行操作,例如将新文档插入数据库或查询特定集合。这将使安全策略难以管理并与系统中的许多用户保持一致。相反,允许对特定资源执行操作的规则被分配给角色。
将角色视为给定用户的工作或职责之一可能会有所帮助。例如,经理可能对公司 MongoDB 实例中的每个文档具有读写访问权限,而销售分析师可能仅对销售记录具有只读访问权限。
角色是用一组一个或多个权限来定义的。每个权限都包含一个操作(例如创建新文档、从文档检索数据或创建和删除用户)以及可以执行该操作的资源(例如名为 的数据库或名为 的集合reports)orders。就像在现实生活中一样,一家公司可能有许多销售分析师和员工,他们承担多个职责,在 MongoDB 中,许多用户可以分配给同一角色,并且单个用户可以被授予多个角色。
角色通过角色名称和数据库的组合来标识,因为每个角色(在数据库中创建的角色除外admin)只能包含应用于其自己数据库的权限。通过向用户授予在其身份验证数据库之外的数据库中定义的角色,可以向用户授予对多个数据库进行操作的权限。可以在创建用户时或此后的任何时间授予角色。还可以随意撤销角色成员资格,从而可以轻松地将用户管理与访问权限管理分离。
MongoDB 提供了一组内置角色,描述数据库系统中常用的权限,例如read授予只读访问权限、readWrite授予读写权限或dbOwner授予对给定数据库的完全管理权限。对于更具体的场景,还可以使用自定义权限集创建用户定义的角色。
基于角色的访问控制可以为用户分配执行各自任务所需的最低、精确级别的访问权限。这是一种重要的安全实践,称为最小特权原则。
绑定IP地址
mongod 参数:--bind_ip << ip address >>
默认值是所有的IP地址都能访问,该参数指定MongoDB对外提供服务的绑定IP地址,用于监听客户端Application的连接,客户端只能使用绑定的IP地址才能访问mongod,其他IP地址是无法访问的。
设置监听端口
mongod 参数:--port
MongoDB默认监听的端口是27017,该参数显式指定MongoDB实例监听的TCP端口,只有当客户端Application连接的端口和MongoDB实例监听的端口一致时,才能连接到MongoDB实例。
