介绍
MongoDB作为一种流行的NoSQL数据库,拥有易于使用和配置的特性,然而,对于大型项目的敏感数据而言,安全性至关重要。在安装和设置MongoDB时,开发人员需要考虑如何保护其数据库免受未经授权的访问。其中一个关键方面是使用用户名和密码对MongoDB数据库进行身份验证。
使用用户名和密码身份验证的好处
MongoDB默认情况下没有任何身份验证机制,这意味着任何人都可以访问您的数据库。因此,启用身份验证是一种提高MongoDB安全性的重要方法。使用用户名和密码的身份验证可以帮助防止非授权用户访问您的数据库。对于那些希望与MongoDB对话的应用程序,仅在提供正确的凭据后才能进行授权。
设置MongoDB的用户名和密码
步骤一:创建管理员用户
首先,您需要创建MongoDB用户。我们建议创建一个管理员用户,以便您可以对数据库进行管理操作。以下是如何创建管理员用户的步骤。
use admin # 如果admin库不存在则创建新的库
db.createUser(
{
user: "admin",
pwd: "password", # 替换自己的密码
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
步骤二:确保MongoDB已启用身份验证
接下来,您需要通过编辑MongoDB配置文件(例如,/etc/mongod.conf)来确保已启用身份验证。默认情况下,Linux操作系统上的MongoDB服务器是打开的,但是身份验证未启用。因此,您需要添加以下行以启用身份验证。
security:
authorization: enabled
步骤三:创建其他用户
现在,您可以创建其他用户来访问MongoDB。以下是如何创建新用户的步骤(请确保管理员用户已经创建)。
use admin
db.createUser(
{
user: "mynewuser",
pwd: "mypassword",
roles: [ { role: "readWrite", db: "mynewdatabase" } ]
}
)
现在,您已经在MongoDB中创建了两个用户(管理员用户和mynewuser)。管理员用户可以访问任何数据库,而mynewuser用户只能访问mynewdatabase数据库。
如何使用身份验证登录MongoDB
你可以使用如下命令登录到MongoDB。
mongo -u admin -p password --authenticationDatabase admin
这里的-u
标志用于指定MongoDB进行身份验证的用户名,-p
标志用于指定密码,--authenticationDatabase
标志用于指定进行身份验证的数据库。 确保在此处指定的数据库与创建管理员用户时使用的数据库一样。
如果您的MongoDB是在本地运行,则您将看到类似于以下输出的东西:
MongoDB shell version v4.0.9
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 4.0.9
>
您现在已经通过身份验证登录MongoDB。一旦您登录,您可以使用命令exit
退出MongoDB。
进行MongoDB身份验证时的问题和解决方案
在使用身份验证时,您可能会遇到以下问题:
问题1:在每个终端上重新进行身份验证
在每个终端上重新进行身份验证可能会非常麻烦。为了解决这个问题,您可以使用以下方法在shell中使用永久身份验证:
vim ~/.mongorc.js
```
若提示不存在,即可使用云主机提供的vim进行对创建该文件:
```bash
vi ~/.mongorc.js
```
在mongorc.js文件里添加以下代码并保存:
```
db.auth("admin","password")
```
重启shell将再也不需要进行身份验证了。
问题2:无法在使用启用身份验证的MongoDB缩放集上运行某些命令
在使用启用身份验证的MongoDB缩放集时,您可能无法运行某些命令。这是因为某些命令只能在具有特定角色的MongoDB用户上运行。为了解决这个问题,您需要创建具有特定权限的用户:
use admin
db.createUser(
{
user: "clusterAdmin",
pwd: "mypassword",
roles: [ "clusterAdmin" ]
}
)
使用-u
和-p
标志以及--authenticationDatabase
标志登录到MongoDB。登录后,使用以下命令以clusterAdmin角色身份登录MongoDB:
use admin
db.auth("clusterAdmin","mypassword")
现在,您可以在缩放集上运行联机操作了。
结论
通过启用MongoDB身份验证,您可以增强MongoDB数据库的安全性。使用用户名和密码的身份验证可以帮助防止未授权的用户访问您的数据库。此外,MongoDB还提供了特定的角色,以便您可以更好地为用户分配权限。此外,使用永久身份验证可以帮助您避免在每个终端上进行身份验证的麻烦。在实际使用中,应该按需使用这些MongoDB身份验证技术,以使您的数据始终受到保护。