在 MongoDB 中创建安全的数据库

7

我希望在MongoDB中创建一个安全的数据库。

所谓安全,就是应用程序必须传递用户名/密码才能连接到我的MongoDB数据库。

2个回答

18

来自Mongo Java教程

MongoDB可以在安全模式下运行,通过名称和密码身份验证控制对数据库的访问。当以此模式运行时,任何客户端应用程序在执行任何操作之前必须提供名称和密码。在Java驱动程序中,您只需使用已连接的mongo对象执行以下操作:

boolean auth = db.authenticate(myUserName, myPassword);

如果用户名和密码在数据库中是有效的,那么 auth 将为 true。否则,它将为 false。如果有可用的话,您应该查看 MongoDB 日志以获取更多信息。

大多数用户在受信任的环境中运行 MongoDB 而不需要身份验证。


配置身份验证和安全

身份验证存储在每个数据库的 system.users 集合中。例如,在数据库 projectx 上,projectx.system.users 将包含用户信息。

我们应首先为整个数据库服务器进程配置一个管理员用户。此用户存储在特殊的 admin 数据库下。

如果在 admin.system.users 中没有配置用户,则可以从本地主机接口访问数据库而无需进行身份验证。因此,从运行数据库的服务器(即在 localhost 上),运行数据库 shell 并配置管理用户:

$ ./mongo
> use admin
> db.addUser("theadmin", "anadminpassword")

我们现在创建了一个用于数据库管理员的用户。请注意,如果我们之前没有进行身份验证,现在我们必须进行身份验证才能执行进一步的操作,因为在admin.system.users中有一个用户。

> db.auth("theadmin", "anadminpassword")

我们可以使用以下命令查看数据库中现有的用户:

> db.system.users.find()

现在,让我们配置另一个数据库的“常规”用户。

> use projectx
> db.addUser("joe", "passwordForJoe")

最后,让我们添加一个只读用户。 (仅在1.3.2+中支持)

> use projectx
> db.addUser("guest", "passwordForGuest", true)

你在管理数据库中创建了管理员theadmin,然后使用--auth选项重新启动了mongod。为什么现在如果你执行./mongo admin命令,就可以自动登录而不需要提供用户名和密码呢? - Strae
在这种情况下,您已经启动了Mongo shell但尚未进行身份验证。尝试执行任何操作,例如show collections,您将收到一个“未经授权”的错误。 - Jed Richards

3
  • 为mongo实例创建一个管理员用户

> use admin

> db.addUser("admin", "xyzxyz")

  • 切换到需要进行身份验证的数据库

> use newdb

> db.addUser("newuser", "strongpwd")

  • 停止mongo实例/服务。如果mongodb是通过ppa安装的,则默认配置为服务形式。

sudo service mongodb stop

如果是从源代码安装的,请使用以下命令停止进程:

/etc/init.d/mongodb stop

  • 更改配置文件,使其默认使用身份验证

vim /etc/mongodb.conf

auth = true

  • 启动mongodb。如果它是一个服务

sudo service mongodb restart

否则

mongod --config /etc/mongodb.conf

  • 检查身份验证是否启用:

> show collectionsnewdb 库上应该会出现错误。

"$err" : "not authorized for query on newdb.system.namespaces",
"code" : 16550

应该在

> db.auth("newuser", "strongpwd")

之后才能正常工作。

现在数据库newdb已经得到安全保护。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接