IBM Cloud Docs
Connessione di una applicazione esterna alla distribuzione PostgreSQL

Connessione di una applicazione esterna alla distribuzione PostgreSQL

Le tue applicazioni e i tuoi driver utilizzano stringhe di connessione per effettuare una connessione a IBM Cloud® Databases for PostgreSQL. Il servizio fornisce stringhe di connessione specifiche per driver e applicazioni. Le stringhe di connessione sono visualizzate nel riquadro Endpoint della Panoramicadella tua distribuzione e possono essere richiamate anche dall'APICloud Databases e dall'API Cloud Databases.

Le stringhe di connessione possono essere utilizzate da qualsiasi credenziale creata nella propria distribuzione. Mentre puoi utilizzare l'utente amministratore per tutte le tue connessioni e applicazioni, potrebbe essere meglio creare utenti specificamente per le tue applicazioni con cui connetterti. Per ulteriori informazioni, vedere Attribuzione delle stringhe di connessione.

Connessione alla distribuzione PostgreSQL con il driver di una lingua

Tutte le informazioni di cui un driver ha bisogno per stabilire una connessione alla tua distribuzione si trovano nella sezione "postgres" delle tue stringhe di connessione. La tabella contiene una suddivisione per riferimento.

informazioni sulla connessione postgres/URI
Nome campo Indice Descrizione
Type Tipo di connessione - per PostgreSQL, è "URI".
Scheme Schema per un URI - per PostgreSQL, è "postgresql".
Path Percorso per un URI - per PostgreSQL, è il nome del database. Il valore predefinito è ibmclouddb.
Authentication Username Il nome utente utilizzato per la connessione.
Authentication Password Una password per l'utente - potrebbe essere mostrata come $PASSWORD
Authentication Method Come avviene l'autenticazione; l'autenticazione "diretta" è gestita dal driver.
Hosts 0... Un nome di host e una porta a cui connettersi.
Composed 0... Un URI che combina Schema, Autenticazione, Host e Percorso.
Certificate Name Il nome assegnato per il certificato proprietario del servizio per la distribuzione del database.
Certificate Base64 Una versione codificata base64 del certificato.
  • 0... indica che in un array potrebbero essere presenti una o più di queste voci.

Molti driver PostgreSQL sono in grado di creare una connessione alla tua distribuzione quando viene fornita la stringa di connessione formattata URI trovata nel campo "composto" delle informazioni di connessione. Ad esempio,

postgres://ibm_cloud_30399dec_4835_4967_a23d_30587a08d9a8:$PASSWORD@981ac415-5a35-4ac7-b6bb-fb609326dc42.8f7bfd8f3faa4218aec56e069eb46187.databases.appdomain.cloud:32704/ibmclouddb?sslmode=verify-full

Il seguente esempio utilizza le informazioni dalla stringa di connessione e il Java jdbc per connettersi al database.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.util.logging.*;

public class PGConnect {

    private final static Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);

    private Connection connect() {

        final String url = "jdbc:postgresql://host:port/ibmclouddb";

        Properties props = new Properties();
        props.setProperty("user","admin");
        props.setProperty("password","mypassword123");
        props.setProperty("ssl","true");
        props.setProperty("sslmode","verify-full");
        props.setProperty("sslrootcert", "/path/to/cert");

        Connection conn = null;
        while (conn == null) {
            try {
                conn = DriverManager.getConnection(url, props);
                System.out.println("Connected to PG");
            } catch (SQLException e) {
                System.out.printf("%s\n", e);
                LOGGER.info("Not connected, retying ...");
            }
        }

        return conn;

    }

    public static void main(String[] args) {

        PGConnect icd = new PGConnect();

        try {
            Connection connection = icd.connect();
            Statement stmt = connection.createStatement();

            ResultSet rs = stmt.executeQuery("SELECT * from pg_database");
            while (rs.next()) {
                System.out.println("DB Name: " + rs.getString(1));
            }

        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }   
    }
}

Il seguente esempio utilizza le informazioni dalla stringa di connessione e il Python Psycopg2 per connettersi al tuo database. Questo è solo un semplice esempio di connessione, senza la gestione degli errori o la logica dei tentativi e potrebbe non essere adatto per la produzione.

import psycopg2

try:
    conn = psycopg2.connect(
      host="hostname.databases.appdomain.cloud",
      port= 31525,
      user="username",
      password="password",
      sslmode="verify-full",
      sslrootcert="/path/to/cert/ca-certificate.crt",
      database="ibmclouddb")
except:
    print("Unable to connect to database")

cur = conn.cursor()
cur.execute("SELECT datname FROM pg_database")
rows = cur.fetchall()

print("List of databases:")
for row in rows:
    print("  ",row[0])

Il seguente esempio utilizza le informazioni dalla tua stringa di connessione e il driver Node node-postgres per connettersi al tuo database.

const pg = require("pg");
const fs = require("fs");

let connectionString = "postgres://<username>:<password>@<host>:<port>/<database>";
let caCert = fs.readFileSync('/path/to/cert');

// set up a client with your PostgreSQL connection string and TLS options
let client = new pg.Client({
    connectionString: connectionString,
    ssl: {
    ca: caCert,
    rejectUnauthorized: true
    }
});


client.connect(function(err) {
    if (err) {
        console.log(err);
        process.exit(1);
    } else {
        // query for the names of the databases
        client.query(
            "SELECT datname FROM pg_database;",
            function(err, result) {
                if (err) {
                    console.log(err);
                }
                // return the names of the databases
                console.log(result.rows);
                client.end();
            }
        );
    }
});

Per utilizzare node-postgres driver, rimuovere il parametro sslmode dalla stringa di connessione della distribuzione. In caso contrario, questo parametro sovrascrive i parametri ssl: {...}, impedendo il corretto caricamento del certificato CA.

Driver TLS e supporto per i certificati proprietari del servizio

Tutte le connessioni a Databases for PostgreSQL sono abilitate TLS 1.2, quindi il driver che utilizzi per la connessione deve essere in grado di supportare la crittografia. L'installazione viene fornita anche con un certificato proprietario del servizio, in modo che il driver possa verificare il server al momento della connessione.

Per ulteriori informazioni, vedi Cloud Databases Certificates FAQ.

Utilizzo del certificato proprietario del servizio

  1. Copiare le informazioni sul certificato dal pannello Endpoint o dal campo Base64 delle informazioni di connessione.
  2. Se necessario, decodificare la stringa Base64 in testo.
  3. Salvare il certificato in un file. (È possibile utilizzare il nome fornito o il proprio nome file).
  4. Fornire il percorso del certificato al driver o al client.

Pannello Endpoint CLI
Scheda Informazioni plug-in CLI

Supporto del plug-in CLI per il certificato proprietario del servizio

Puoi visualizzare il certificato decodificato per la tua distribuzione con il plug-in CLI con il comando ibmcloud cdb deployment-cacert "example-deployment". Decodifica base64 in testo. Copiare e salvare l'output del comando in un file e fornire il percorso del file al driver.

Altri driver

PostgreSQL ha una vasta gamma di driver linguistici. La tabella comprende alcuni dei più comuni.

DriverPostgreSQL
Lingua Unità Esempi
PHP pgsql Link
Ruby ruby-pg Link
Ruby on Rails Rails Link
C# ODBC Link
Vai pq Link
Node node-postgres Link