Conectando um aplicativo externo

Seus aplicativos e drivers usam sequências de conexões para fazer uma conexão com o IBM Cloud® Databases for MongoDB. Cada implementação tem sequências de conexões especificamente para drivers e aplicativos. As cadeias de conexão são exibidas no painel Endpoints da Visão geral da sua implantação e também podem ser recuperadas no plug-in Cloud Databases CLI e na API Cloud Databases.

As cadeias de conexão podem ser usadas por qualquer um dos usuários criados na sua implementação. Embora seja possível usar o usuário admin para todas as conexões e os aplicativos, pode ser melhor criar usuários especificamente para as conexões dos aplicativos com eles. Para obter mais informações, consulte Obtenção de cadeias de conexão.

Ao conectar um aplicativo externo, use apenas drivers suportados pelo MongoDB ou MongoDB's Bibliotecas apoiadas pela comunidade em destaque. Cloud Databases não suporta nenhum driver que não seja suportado por MongoDB.

Usando informações de conexão

Todas as informações de que um driver precisa para fazer uma conexão com a sua implantação estão na seção "MongoDB" de uma credencial criada na página Credenciais de serviço. A tabela contém um detalhamento para referência.

informações de conexão mongodb/URI
Nome do campo Index Descrição
Type Tipo de conexão - para MongoDB, é "URI"
Scheme Esquema para um URI - para MongoDB, é "mongodb"
Path Caminho para um URI - para MongoDB, é o nome do banco de dados. Ao fornecer uma instância MongoDB pela primeira vez, o banco de dados padrão para conexão com o usuário é admin.
Authentication Username O nome do usuário usado para se conectar.
Authentication Password Uma senha para o usuário - pode ser mostrada como $PASSWORD
Authentication Method Como a autenticação ocorre; a autenticação "direta" é manipulada pelo driver. O Mongo 3.6 usa o SCRAM SHA 1, enquanto o Mongo 4.2 usa o SHA 256
Hosts 0... Um nome do host e uma porta para se conectar
Composed 0... Um URI que combina Esquema, Autenticação, Host, Caminho e Nome do conjunto de réplicas.
Certificate Name O nome alocado para o certificado proprietário do serviço para a implementação do banco de dados
Certificate Base64 Uma versão do certificado codificada em Base64.
  • 0... indica que pode haver uma ou mais dessas entradas em uma matriz.

Muitos drivers MongoDB são capazes de se conectar à sua implantação quando recebem a cadeia de conexão formatada por URI encontrada no campo "composed" das informações de conexão. Cloud Databases fornece uma instância altamente disponível do MongoDB, portanto, certifique-se de incluir todos os membros na cadeia de conexão. Por exemplo:

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

O parâmetro de consulta replicaSet contém o nome do conjunto de réplicas para sua implementação. Provavelmente é replset. Alguns drivers e aplicativos precisam que ele seja transmitido separadamente.

O exemplo a seguir usa as informações de sua sequência de conexões e o Driver Java MongoDB para conectar-se ao banco de dados.

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();

    }
}

O próximo exemplo usa informações de sua sequência de conexões e o driver Python pymongo para conectar-se ao banco de dados. Este é apenas um exemplo simples de conexão, sem manipulação de erros ou lógica de nova tentativa e pode não ser adequado para a produção.

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")

Este exemplo final usa o driver Node.js MongoDB

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();
        });
    }
});

Suporte ao TLS do driver e ao certificado proprietário do serviço

Todas as conexões com o Databases for MongoDB são ativadas pelo TLS 1.2, portanto, o driver que é usado para a conexão precisa ser capaz de suportar criptografia.

As seguintes cifras de cifras são suportadas por 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

Sua implementação também vem com um certificado de propriedade do serviço para que o driver possa verificar o servidor na conexão.

Para obter mais informações, consulte Cloud Databases FAQ de Certificados.

Usando o certificado de propriedade do serviço

  1. Copie as informações do certificado a partir do painel Terminais ou do campo Base64 das informações de conexão.
  2. Se necessário, decodifique a sequência Base64 em texto.
  3. Salve o certificado em um arquivo. (É possível usar o nome fornecido ou o próprio nome de seu arquivo). *
  4. Forneça o caminho do certificado para o driver ou o cliente.

*Para MacOS, assegure-se de ter o certificado importado em seu armazenamento de confiança e marque-o como trust always.

Suporte ao plug-in da CLI para o certificado proprietário do serviço

É possível exibir o certificado decodificado para a sua implementação com o plug-in da CLI com o comando ibmcloud cdb deployment-cacert "your-service-name". Ele decodifica o Base64 em texto. Copie e salve a saída do comando em um arquivo e forneça o caminho do arquivo para o driver.

Outros drivers de linguagens

A MongoDB tem uma vasta matriz de drivers de linguagem. A tabela cobre alguns dos mais comuns. Se estiver procurando por mais idiomas, experimente a lista de drivers MongoDB.org.