连接外部应用程序
应用程序和驱动程序使用连接字符串来建立与 IBM Cloud® Databases for MongoDB的连接。 每个部署都有专门用于驱动程序和应用程序的连接字符串。 连接字符串显示在部署的“概述”的“端点”面板中,还可以从 Cloud Databases CLI 插件 和 Cloud Databases API 中检索。
您在部署中创建的任何用户都可以使用连接字符串。 虽然您可以将管理用户用于所有连接和应用程序,但最好专门为要连接的应用程序创建用户。 有关详细信息,请参阅 获取连接字符串。
连接外部应用程序时,仅使用 MongoDB或者 MongoDB's精选社区支持图书馆。Cloud Databases不支持任何不支持的驱动程序MongoDB。
使用连接信息
驱动程序与部署建立连接所需的所有信息都在 Service credentials 页面上创建的凭证的 "MongoDB" 部分中。 该表包含供参考的细目。
字段名称 | 索引 | 描述 |
---|---|---|
Type |
连接类型 - 用于MongoDB,它是“URI” | |
Scheme |
URI 方案 - 用于MongoDB,它是“mongodb” | |
Path |
URI 的路径 - 用于MongoDB,它是数据库名称。 首次供应 MongoDB 实例时,用户要连接的缺省数据库为 admin 。 |
|
Authentication |
Username |
用于连接的用户名。 |
Authentication |
Password |
用户的密码-可能显示为 $PASSWORD |
Authentication |
Method |
如何进行认证;“直接”认证由驱动程序处理。 Mongo 3.6 使用 SCRAM SHA 1,而 Mongo 4.2 使用 SHA 256 |
Hosts |
0... |
要连接到的主机名和端口 |
Composed |
0... |
用于组合方案,认证,主机,路径和副本集名称的 URI。 |
Certificate |
Name |
数据库部署服务专有证书的分配名称 |
Certificate |
Base64 | 证书的 base64 编码版本。 |
0...
指示数组中可能有一个或多个这些条目。
如果在连接信息的“组成”字段中提供 URI 格式的连接字符串,许多MongoDB驱动程序都能连接到您的部署。Cloud Databases提供了一个高可用的MongoDB,实例,因此请确保在连接字符串中包含所有成员。 例如:
mongodb://admin:$PASSWORD@d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-0.databases.appdomain.cloud:30484,d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-1.databases.appdomain.cloud:30484,d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-2.databases.appdomain.cloud:30484/<database name>?authSource=admin&replicaSet=replset
replicaSet
查询参数包含部署的副本集名称。 可能是 replset
。 某些驱动程序和应用程序需要单独传入。
以下示例使用连接字符串和 MongoDB Java 驱动程序 中的信息来连接到数据库。
public class MongodbConnect {
private static Logger log = LoggerFactory.getLogger(LoggerFactory.class);
public static void main(String[] args) {
System.setProperty("javax.net.ssl.trustStore", "path/to/keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "store_password");
// make sure you append ssl=true to the connection URI
final String mongoURI = "mongodb://user:password@host:port,host:port/?authSource=admin&replicaSet=replset&ssl=true";
MongoClient mongoClient = MongoClients.create(mongoURI);
boolean testDB = false;
// this loop will continue attempting to connect to the database until the admin database is found
while (!testDB) {
try {
// check if you can connect to the database by checking for
// the presence of the admin database. If the admin databases isn't found
// then you're not connected.
MongoIterable<String> databases = mongoClient.listDatabaseNames();
for (String name: databases) {
if (name.contains("admin")) {
System.out.println("admin found...");
testDB = true;
}
}
} catch (Exception e) {
log.info(e.getMessage());
}
}
// close connection
mongoClient.close();
}
}
下一个示例使用来自连接字符串和 Python 驱动程序 pymongo 的信息来连接到数据库。 这只是一个简单的连接示例,没有错误处理或重试逻辑,可能不适合生产。
import pymongo
from pymongo import MongoClient
from pymongo.errors import ConnectionFailure
client = MongoClient(
"mongodb://admin:$PASSWORD@host.databases.appdomain.cloud:30484/<database name>?authSource=adminreplicaSet=replset",
ssl=True,
ssl_ca_certs="/path/to/cert/ca-certificate.crt"
)
try:
db_list = client.list_database_names()
print("List of databases:")
print(db_list)
except ConnectionFailure as err:
print("Unable to connect to database")
此最后一个示例使用 MongoDB Node.js 驱动程序
const MongoClient = require("mongodb").MongoClient;
let connectionString = "mongodb://<username>:<password>@<host>:<port>,<host>:<port>/<database>?authSource=admin&replicaSet=replset";
let options = {
tls: true,
tlsCAFile: `/path/to/cert`,
useUnifiedTopology: true
};
// connects to a MongoDB database
MongoClient.connect(connectionString, options, function (err, db) {
if (err) {
console.log(err);
} else {
// lists the databases that exist in the deployment
db.db('example').admin().listDatabases(function(err, dbs) {
console.log(dbs.databases);
db.close();
});
}
});
驱动程序 TLS 和服务专有证书支持
与 Databases for MongoDB 的所有连接都已启用 TLS 1.2,因此用于连接的驱动程序需要能够支持加密。
Databases for MongoDB Enterprise Edition支持以下 密码套件:
- ECDHE-ECDSA-AES128-GCM-SHA256
- ECDHE-RSA-AES128-GCM-SHA256
- ECDHE-ECDSA-AES256-GCM-SHA384
- ECDHE-RSA-AES256-GCM-SHA384
- ECDHE-ECDSA-CHACHA20-POLY1305
- ECDHE-RSA-CHACHA20-POLY1305
- DHE-RSA-AES128-GCM-SHA256
- DHE-RSA-AES256-GCM-SHA384
您的部署还附带了服务专有证书,这样驱动程序就能在连接时验证服务器。
有关更多信息,请参阅 Cloud Databases 证书常见问题。
使用服务专有证书
- 从 端点 面板或连接信息的 Base64 字段复制证书信息。
- 如果需要,将 Base64 字符串解码为文本。
- 将证书保存到文件中。 (您可以使用提供的名称或您自己的文件名)。*
- 向驱动程序或客户机提供证书的路径。
*为了MacOS,确保已将证书导入信任库,并将证书标记为 trust always
。
CLI 插件支持服务专有证书
您可以使用命令 ibmcloud cdb deployment-cacert "your-service-name"
通过 CLI 插件显示部署的解码证书。 它将 base64 解码为文本。 将命令的输出复制并保存到文件,并提供该文件的驱动程序路径。
其他语言驱动程序
MongoDB 有大量的语言驱动程序。 此表涵盖一些最常见的驱动程序。 如果要查找更多语言,请尝试 MongoDB.org 驱动程序列表。