在mongodb中创建安全数据库

在mongodb中创建安全数据库,mongodb,Mongodb,我想在mongodb中创建一个安全的数据库 安全意味着应用程序必须传递用户名/密码才能连接到mongodb中的我的数据库。来自MongoJava教程 MongoDB可以在安全模式下运行,通过名称和密码身份验证控制对数据库的访问。在此模式下运行时,任何客户端应用程序在执行任何操作之前都必须提供名称和密码。在Java驱动程序中,只需对连接的mongo对象执行以下操作: boolean auth = db.authenticate(myUserName, myPassword); 如果名称和密码对数

我想在mongodb中创建一个安全的数据库


安全意味着应用程序必须传递用户名/密码才能连接到mongodb中的我的数据库。

来自MongoJava教程

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

boolean auth = db.authenticate(myUserName, myPassword);
如果名称和密码对数据库有效,则auth将为true。否则,它将是错误的。您应该查看MongoDB日志以了解更多信息(如果可用)

大多数用户在可信环境中运行MongoDB而不进行身份验证


配置身份验证和安全性

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

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

> use projectx
> db.addUser("joe", "passwordForJoe")
如果在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+中支持)

  • 为mongo实例创建管理员用户
>使用admin

db.addUser(“admin”,“xyzxyz”)

  • 切换到需要身份验证的数据库
>使用newdb

>db.addUser(“新用户”、“strongpwd”)

  • 停止mongo实例/服务。如果mongodb是通过
    ppa
    安装的,则将其配置为服务
sudo服务mongodb站

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

/etc/init.d/mongodb-stop

  • 将配置文件更改为默认使用身份验证
vim/etc/mongodb.conf

auth=true

  • 启动mongodb。如果是服务
sudo服务mongodb重启

否则

mongod--config/etc/mongodb.conf

  • 检查是否启用了身份验证:
>在
newdb
上显示集合应给出错误

"$err" : "not authorized for query on newdb.system.namespaces",
"code" : 16550
之后应该工作

>db.auth(“新用户”、“strongpwd”)


现在db
newdb
已被保护。

因此,您在管理数据库中创建了管理员
admin
,然后使用
--auth
选项重新启动mongod。为什么现在,如果您执行
/mongo admin
,您将自动登录,而不提供用户和密码?在这种情况下,您已经启动了mongo shell,但尚未通过身份验证。尝试执行任何操作,例如
显示集合
,您将收到
未经授权的
错误。