【发布时间】:2015-07-10 15:40:51
【问题描述】:
我想在 mongodb 中创建安全的数据库。
安全意味着应用程序必须传递用户名/密码才能连接到我在 mongodb 中的数据库。
【问题讨论】:
标签: mongodb
我想在 mongodb 中创建安全的数据库。
安全意味着应用程序必须传递用户名/密码才能连接到我在 mongodb 中的数据库。
【问题讨论】:
标签: mongodb
来自 Mongo Java 教程
MongoDB 可以在安全模式下运行,其中通过名称和密码身份验证控制对数据库的访问。在此模式下运行时,任何客户端应用程序都必须在执行任何操作之前提供名称和密码。在 Java 驱动程序中,您只需对连接的 mongo 对象执行以下操作:
boolean auth = db.authenticate(myUserName, myPassword);
如果名称和密码对数据库有效,则 auth 将为真。否则,它将是错误的。如果可用,您应该查看 MongoDB 日志以获取更多信息。
大多数用户在受信任的环境中无需身份验证即可运行 MongoDB。
配置身份验证和安全性
身份验证存储在每个数据库的 system.users 集合中。例如,在数据库 projectx 上,projectx.system.users 将包含用户信息。
我们首先应该为整个db server进程配置一个管理员用户。此用户存储在特殊的管理数据库下。
如果 admin.system.users 中没有配置用户,则可以从 localhost 界面访问数据库而无需进行身份验证。因此,从运行数据库的服务器(因此在 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,怎么会在不提供用户和通行证的情况下自动登录?
show collections,你会得到一个unauthorized 错误。
> use admin
> db.addUser("admin", "xyzxyz")
> use newdb
> db.addUser("newuser", "strongpwd")
ppa 安装的,则将其配置为服务。 sudo service mongodb stop
如果是从源代码安装的,请使用以下命令停止进程:
/etc/init.d/mongodb stop
vim /etc/mongodb.conf
auth = true
sudo service mongodb restart
其他
mongod --config /etc/mongodb.conf
newdb 上的> show collections 应该给出错误
"$err" : "not authorized for query on newdb.system.namespaces",
"code" : 16550
并且应该在
之后工作> db.auth("newuser", "strongpwd")
现在 db newdb 是安全的。
【讨论】: