Mongodb如何开启用户访问控制详解

1. 什么是Mongodb

MongoDB是一个高性能,开源的NoSQL数据库,使用BSON格式存储数据。与关系型数据库不同的是,MongoDB是基于文档的数据库,它的存储格式类似于JSON,而不是表格形式。

由于其高可扩展性、高性能以及支持大型分布式部署,Mongodb在现代Web应用程序中广泛使用,尤其是在大数据,实时Web应用程序和物联网(IoT)中。

2. 用户访问控制是什么

用户访问控制是一种技术,旨在防止不需要的用户访问关键数据。它通过对用户和应用程序进行身份验证,并将不同的权限分配给不同的用户,以确保仅授权的用户可以访问敏感数据。

在使用MongoDB时,开启用户访问控制是非常重要的安全措施。通过在MongoDB上指定用户名和密码,管理员可以规定MongoDB实例上不同用户的权限,并限制对数据库的访问,从而更容易地防止未经授权的访问和数据泄露。

3. 如何准备用户创建和角色

3.1 创建管理员用户

要启用用户访问控制,必须首先创建一个管理员用户。

$ mongo

# 进入mongo shell

use admin

db.createUser(

{

user: "admin",

pwd: "admin123",

roles: [ { role: "root", db: "admin" } ]

}

)

这将创建一个名为“admin”的新用户,密码为“admin123”,并授予其“root”角色。请注意,此命令应在mongo shell中执行。

3.2 创建应用程序用户

要创建应用程序用户,需要使用管理员用户名和密码进行身份验证,并为新用户分配不同的角色来实现所需的访问权限。

$ mongo -u admin -p admin123 --authenticationDatabase admin

# 进入mongo shell

use mydb

db.createUser(

{

user: "app_user",

pwd: "user123",

roles: [ { role: "readWrite", db: "mydb" }]

}

)

这将创建一个名为“app_user”的新用户,密码为“user123”,并为其授予“readWrite”角色以允许对“mydb”数据库进行读写操作。

4. 如何启用用户访问控制

完成上述准备步骤后,管理员可以启用用户访问控制功能并确保只有被授权的用户可以访问Mongodb实例。

4.1 修改mongodb配置文件

在启用访问控制之前,需要对mongodb配置文件(默认位置:/etc/mongod.conf)进行修改。

security:

authorization: enabled

这将打开授权功能,并启用MongoDB身份验证。

4.2 重启mongodb

在更改完配置文件后,需要重启mongodb以应用更改。

$ sudo systemctl restart mongod

现在,只有经过身份验证的用户才能访问MongoDB数据库,未经授权的用户将被拒绝访问。

5. 如何进行用户身份验证

完成上述步骤后,管理员可以使用mongo shell进行身份验证。例如,可以使用以下命令来使用“app_user”用户登录MongoDB:

$ mongo -u app_user -p user123 --authenticationDatabase mydb

该命令将询问用户提供用户名和密码,并连接到名为“mydb”的数据库。如果提供的凭据有效,则用户将被授权进行相关操作,否则将被拒绝访问。

还可以使用以下命令在mongo shell中运行身份验证命令:

use mydb

db.auth("app_user", "user123")

这将验证提供的凭据是否有效,如果有效,则返回1。

6. 如何为用户分配不同的权限

使用MongoDB,管理员可以将不同的权限分配给不同的用户,以便控制对数据库的访问。以下是在MongoDB中分配角色的不同方法:

6.1 内置角色

MongoDB预定义了许多角色,可用于实现常见的访问控制方案。以下是一些MongoDB内置角色:

read:允许用户查看和复制数据。

readWrite:允许用户查看,复制和写入数据。

dbAdmin:允许用户执行数据库管理任务,如备份和恢复。

userAdmin:允许用户管理其他用户的权限,如创建新用户和分配角色。

root:允许用户对整个MongoDB实例进行管理。

6.2 细粒度权限控制

除了内置角色之外,您还可以创建自定义角色并将其分配给用户。自定义角色可以更好地满足特定的访问控制要求,可以分配更细粒度的权限。

要创建自定义角色,请使用以下语法:

use mydb

db.createRole(

{

role: "custom_role",

privileges: [

{ resource: { db: "mydb", collection: "" }, actions: [ "find", "insert", "update" ]}

],

roles: []

}

)

上述代码将创建一个名为“custom_role”的新角色,并授予其对“mydb”中的所有数据集进行查找、插入和更新操作的特权。可以通过指定不同的资源来分配不同的特权。

要将自定义角色分配给用户,请使用以下语法:

use mydb

db.grantRolesToUser("username", [ { role: "custom_role", db: "mydb" } ])

上述代码将用户“username”分配给名为“custom_role”的角色,并将此角色分配给“mydb”数据库。

7. 总结

通过启用用户访问控制并为用户分配不同的角色,MongoDB管理员可以更好地保护数据库中的敏感数据并防止未经授权的访问。在MongoDB中启用用户访问控制并分配不同的角色并不是非常困难,但确实需要一些准备工作。有了正确的设置和配置,MongoDB可确保只有经过身份验证的用户才能访问数据库,并提供细粒度的权限控制来满足不同的访问控制要求。

数据库标签