【问题标题】:create secure database in mongodb在 mongodb 中创建安全数据库
【发布时间】:2015-07-10 15:40:51
【问题描述】:

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

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    来自 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)
    

    【讨论】:

    • 所以您在 admin 数据库中创建了您的管理员 theadmin,然后使用 --auth 选项重新启动了 mongod。现在,如果您执行./mongo admin,怎么会在不提供用户和通行证的情况下自动登录?
    • 在这种情况下,您已经启动了 mongo shell,但尚未经过身份验证。尝试做任何操作,例如show collections,你会得到一个unauthorized 错误。
    【解决方案2】:
    • 为 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

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

    newdb 上的> show collections 应该给出错误

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

    并且应该在

    之后工作

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

    现在 db newdb 是安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2019-09-27
      • 2021-06-22
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多