【问题标题】:How to create a CUPS service for mongoDB?如何为 mongoDB 创建 CUPS 服务?
【发布时间】:2017-05-09 19:16:02
【问题描述】:

我目前正在使用本地数据库。使用终端访问mongodb。

这些是我拥有的所有凭据。在我的应用程序属性中,当我提供以下数据时,我能够检索和存储数据。

spring.data.mongodb.database=myNewDB
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017

我正在尝试使用 Cloud Foundry CUPS 将 mongodb 与 URI 连接。 但是按照 URI 指南,我缺少用户名和密码。我在哪里可以找到这些值?我所有的数据目前都存储在本地,不希望使用 Cloud Foundry 提供的 MongoDB,因为我必须再次手动输入这些数据。

DB-TYPE://USERNAME:PASSWORD@HOSTNAME:PORT/NAME
mongo://don't:know@localhost:27017/myNewDB

尝试

在 mongo shell 中,我执行以下操作来创建管理员。

use admin
db.createUser(
   {
     user: "appAdmin",
     pwd: "password",
     roles:
       [
         { role: "readWrite", db: "myNewDB" },
         "clusterAdmin"
       ]
   }
)

在此之后,我将以下内容添加到我的 application.properties 中

spring.data.mongodb.username=appAdmin
spring.data.mongodb.password=password

当我运行我的应用程序时,我收到以下错误:

com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=null, userName='appAdmin', source='myNewDB', password=<hidden>, mechanismProperties={}}
    at com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:61) ~[mongo-java-driver-3.2.2.jar:na]
    at com.mongodb.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:32) ~[mongo-java-driver-3.2.2.jar:na]
    at com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:99) ~[mongo-java-driver-3.2.2.jar:na]
    at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:44) ~[mongo-java-driver-3.2.2.jar:na]
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[mongo-java-driver-3.2.2.jar:na]
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:128) ~[mongo-java-driver-3.2.2.jar:na]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_121]
Caused by: com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server localhost:27017. The full response is { "ok" : 0.0, "code" : 18, "errmsg" : "Authentication failed." }
    at com.mongodb.connection.CommandHelper.createCommandFailureException(CommandHelper.java:170) ~[mongo-java-driver-3.2.2.jar:na]
    at com.mongodb.connection.CommandHelper.receiveCommandResult(CommandHelper.java:123) ~[mongo-java-driver-3.2.2.jar:na]
    at com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32) ~[mongo-java-driver-3.2.2.jar:na]
    at com.mongodb.connection.SaslAuthenticator.sendSaslStart(SaslAuthenticator.java:95) ~[mongo-java-driver-3.2.2.jar:na]
    at com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:45) ~[mongo-java-driver-3.2.2.jar:na]
    ... 6 common frames omitted

但是当我从我的 application.properties 文件中删除用户名和密码时。我的应用程序将按预期运行。

【问题讨论】:

    标签: mongodb uri cloud-foundry


    【解决方案1】:

    您的上下文中的用户名和密码是指 MongoDB 的用户名密码。 MongoDB 身份验证是可选的。您无需身份验证即可启动 mongod。但在生产系统中不建议这样做。 您可以为 mongodb 启用身份验证并在其中创建用户进行访问。 https://docs.mongodb.com/manual/tutorial/enable-authentication

    您可以使用 mongodb 参数创建 CUPS 服务并将其绑定到您的应用程序。然后您可以在环境变量 VCAP_SERVICES 中读取此服务。 System.getEnv("VCAP_SERVICES"); 如果您使用 Spring Cloud,您还可以编写自定义连接器来读取配置。 https://spring.io/blog/2014/08/05/extending-spring-cloud

    还请记住,您可能需要在 CF 中创建安全组以打开端口以将云代工厂连接到本地网络。 https://docs.cloudfoundry.org/concepts/asg.html

    【讨论】:

    • 我看到你说它是可选的。但是如果我想用我的本地 mongodb 创建一个 CUPS 服务,它仍然是可选的吗? uri 会是什么样子?
    • 我创建了一个用户名和密码,也为其赋予了角色。但是当我添加 spring.data.mongodb.username 和密码时。我收到身份验证错误。
    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多