MongoDB 3.0+安全权限访问控制详解

1. MongoDB 3.0+安全权限访问控制概述

在MongoDB 3.0版本之前,MongoDB的安全机制主要集中在用户认证(用户名和密码)上。但是,这种方式并不能提供对资源的精细控制,比如限制某些用户/角色函数的执行、读取/写入特定的集合、数据库等。

因此,从MongoDB 3.0版本开始,MongoDB引入了许多新的安全管理功能,这些功能旨在提高安全性并更好地保护MongoDB数据。MongoDB 3.0+安全权限访问控制可以分为以下几个方面:

1.1 访问控制

访问控制是MongoDB安全的首要部分,用于确定哪些用户或角色拥有对数据库和集合进行读取、写入或执行操作的权限。通常,MongoDB使用基于角色的访问控制(Role-Based Access Control, RBAC)模型进行身份验证和授权。

在MongoDB 3.0版本之前,MongoDB使用的是旧的访问控制系统,它使用一组特殊的角色管理数据库和集合。但是,在MongoDB 3.0版本中,这个系统被明确标记为不推荐使用的功能。相反,MongoDB 3.0引入了新的RBAC访问控制系统,以提供更好的安全性和更精细的控制。

1.2 基于角色的访问控制

基于角色的访问控制(Role-Based Access Control,RBAC)是更通用的访问控制模型,它使得管理员可以容易地为用户分配不同的角色,并且可以在不同的集合和数据库上精细调整角色的权限。

在MongoDB中,每个角色都由一组权限集合表示,这些权限集合定义了角色能够执行的操作类型。然后,管理员可以将一个或多个角色分配给用户,并在集合和数据库级别上设置这些角色的权限。

1.3 细粒度的集合级别和数据库级别权限

MongoDB 3.0+允许管理员为每个集合和数据库分配不同的权限集合。这意味着管理员可以更细粒度地控制访问,并且可以避免用户对不必要的数据进行访问。管理员可以通过定义角色来实现这一点。

例如,管理员可以为特定的集合分配一个只读角色,以防止用户意外删除数据。相反地,管理员可以为其他集合分配具有读取和写入权限的角色。

2. MongoDB 3.0+安全权限访问控制详解

2.1 用户和角色

在MongoDB中,用户被定义为可以连接到MongoDB的一组凭证(用户名和密码)。每个用户都可以使用自己的身份认证连接到MongoDB,执行各种操作。

角色是定义在MongoDB中的一组权限集合,用于控制用户对集合和数据库的操作权限。可以将角色视为控制MongoDB中访问控制的基本规则。

2.2 内置角色

MongoDB 3.0中定义了一组预定义的内置角色。一些内置角色包括:

read:允许用户读取指定集合的数据

readWrite:允许用户读取和写入指定集合的数据

dbAdmin:允许用户管理指定数据库的操作

userAdmin:允许用户管理其他用户的帐户,如创建和删除用户

管理员可以通过为用户分配适当的角色来控制它们的访问权限。此外,管理员还可以创建自定义角色并定义自定义权限集合,以允许或限制用户对数据库和集合的访问。

2.3 创建和管理用户

管理员可以通过MongoDB的可执行文件mongo Shell或其他MongoDB客户端程序创建和管理用户。MongoDB的默认管理员帐户是root。

要创建一个新用户,请使用以下命令:

use admin

db.createUser(

{

user: "name",

pwd: "password",

roles: [ "readWrite", "dbAdmin" ]

}

)

在上面的代码中,roles参数指定为用户分配的角色数组。在这个例子中,用户将被分配readWrite和dbAdmin角色,从而允许用户读取和写入指定集合数据,以及管理指定数据库的操作。

2.4 创建和管理角色

管理员可以使用角色来管理MongoDB中的访问控制。要创建一个新的角色,请使用以下命令:

use admin

db.createRole(

{

role: "myRole",

privileges: [

{ resource: { db: "myDB", collection: "myCollection" }, actions: [ "find"] },

{ resource: { db: "myDB", collection: "" }, actions: [ "find"] }

],

roles: [

{ role: "dbAdmin", db: "myDB" },

{ role: "readWrite", db: "myDB" }

]

}

)

在上面的代码中,我们创建了一个名为myRole的新角色。在这个例子中,我们为myRole定义了两个权限项。一个针对特定集合(myDB.myCollection)的访问,另一个允许对指定数据库(myDB)执行访问。密钥roles表示角色继承。

2.5 启用身份验证和访问控制

默认情况下,MongoDB没有启用身份验证和访问控制。要启用身份验证和访问控制:

编辑MongoDB配置文件。文件位置和名称因操作系统而异,因此请查找文档以获取更多信息。

将参数security.authorization设置为启用:security.authorization=enabled

重启MongoDB服务:

$ sudo service mongod restart

一旦启用了身份验证和访问控制,客户端需要使用用户名和密码进行连接。如果没有正确的凭据,服务器将阻止客户端连接。

3. 总结

本文介绍了MongoDB 3.0+的安全权限访问控制的详细信息。访问控制是MongoDB安全的首要部分,它构成了MongoDB数据安全的基础,保护MongoDB数据免受未经授权的访问。管理员可以使用内置角色或自定义角色来管理用户访问控制,并可以为每个角色分配特定的权限集合,以提高安全性。

数据库标签