注册

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

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

MongoDB是一个流行的文档型数据库,但是在安全方面需要特别注意。MongoDB 3.0及其以上版本引入了各种安全性改进,从而为MongoDB用户提供了一些方法来保护他们的数据、说明和数据库自身。本文将重点关注MongoDB 3.0及其以上版本的安全权限访问控制。

1. 创建管理员用户

要开始使用MongoDB的安全权限访问控制,您需要一个特殊的管理员用户。管理员用户授予系统的最高权限,只应该分配给可信的人员。以下是如何创建管理员用户的步骤:

在命令行使用mongod启动Mongod服务之前,使用以下命令来创建管理员用户:

mongo -u admin -p --authenticationDatabase admin

然后在Mongo shell上执行以下语句:

use admin
db.createUser(
    {
      user: "admin",
      pwd: "password",
      roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    }
)

这将创建一个名为“admin”的用户,设置密码为“password”,并授予它“userAdminAnyDatabase”的角色,这个角色会给予用户管理任何数据库的权限。

2. 创建其他用户并授予权限

要创建其他MongoDB 用户并授予它们权限,可以按照以下步骤操作:

  1. 在Mongo shell上执行以下命令创建一个名为“testUser”的用户,并将密码设置为“testPassword”,并将其添加到具有“dbOwner”角色的特定数据库:
use test
db.createUser(
    {
      user: "testUser",
      pwd: "testPassword",
      roles: [ { role: "dbOwner", db: "test" } ]
    }
)

这将创建一个名为“testUser”的用户,密码为“testPassword”,并将它授予一个名为“dbOwner”的角色,这个角色会给它以完全访问它所属的“test”数据库的权限。

  1. 在Mongo shell上,使用以下命令将用户添加到授权列表:
use admin
db.grantRolesToUser(
   "testUser",
   [ "readWrite" , "dbAdmin" ]
)

这将授予“testUser”用户“readWrite”和“dbAdmin”的角色,这些角色分别允许用户读取和写入数据库,并管理数据库。

示例1:授予一个用户只读访问权限

假如我们要创建一个名为“readOnlyUser”的用户,并将其添加到具有“read”访问级别的特定数据库:

use test
db.createUser(
    {
      user: "readOnlyUser",
      pwd: "readOnlyPassword",
      roles: [ { role: "read", db: "test" } ]
    }
)

这将创建一个名为“readOnlyUser”的用户,密码为“readOnlyPassword”,并将它授予一个名为“read”的角色,这个角色会给它以只读的权限,只能访问它所属的“test”数据库。

示例2:授予一个用户在特定集合上读写权限

假如我们要将一个名为“readWriteUser”的用户授予特定集合上的读写权限(例如,名为“products”):

use test
db.createUser(
    {
      user: "readWriteUser",
      pwd: "readWritePassword",
      roles: [ { role: "readWrite", db: "test" } ]
    }
)

这将创建一个名为“readWriteUser”的用户,密码为“readWritePassword”,并将它授予一个名为“readWrite”的角色,这个角色会给它以读/写访问权限,并且可以在它所属的“test”数据库中访问所有集合。

然而,我们需要将它的访问权限限制在只能访问“products”集合上。可以使用以下命令来实现:

use test
db.grantRolesToUser(
   "readWriteUser",
   [ { role: "readWrite", db: "test", collection: "products" } ]
)

这将授予“readWriteUser”用户一个名为“readWrite”的角色,并仅允许它在“test”数据库的“products”集合上进行读写操作。

结论

上述是MongoDB 3.0及其以上版本中的安全权限控制的示例代码。授予权限时,应该始终仔细检查每个用户的角色和访问级别,确保他们的权限足够但不过度。同时,必须注意保证管理员和普通用户的密码保密性,防止他们被泄露。做好这些措施可以保证MongoDB的数据安全性和可靠性。