Connessione a un'applicazione esterna

Le applicazioni e i driver utilizzano stringhe di connessione per effettuare una connessione a IBM Cloud® Databases for MySQL. Il servizio fornisce stringhe di connessione specificamente per driver e applicazioni. Le stringhe di connessione sono visualizzate nel pannello Endpoint della Panoramicadella distribuzione e possono essere richiamate anche dal plug-in CLI diCloud Databases e dall'API Cloud Databases.

Le stringhe di connessione possono essere utilizzate da una qualsiasi delle credenziali create sulla vostra distribuzione. Mentre è possibile utilizzare l'utente admin per tutte le connessioni e le applicazioni, potrebbe essere meglio creare utenti specificatamente per le applicazioni a cui connettersi. La documentazione sulla generazione delle credenziali si trova nella pagina Creare utenti e ottenere stringhe di connessione.

Connessione con un driver di linguaggio

Tutte le informazioni che un driver deve avere per effettuare una connessione alla propria distribuzione sono nella sezione "mysql" delle tue stringhe di connessione. La tabella contiene una ripartizione per riferimento.

informazioni sulla connessione mysql/URI
Nome campo Indice Descrizione
Type Tipo di connessione - per MySQL, è "URI".
Scheme Schema per un URI - per MySQL, è "mysql".
Path Percorso per un URI - per MySQL, è 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 visualizzata 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 una o più di queste voci in una schiera.

Molti driver MySQL 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. Per esempio

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

Per ulteriori informazioni sugli stati ssl-mode, consultare Ulteriori parametri di connessione.

Il seguente esempio utilizza le informazioni dalla tua stringa di connessione e il driver Java jdbc per connettersi al tuo 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;

public class App {
 private final String STATUS_COMMAND = "SHOW VARIABLES LIKE '%version%';";

 private Connection connect = null;
 private Statement stmt = null;
 private ResultSet rs = null;

 private final String url = "mysql://127.0.0.1:30799";
 private final String username = "";
 private final String password = "";
 private final Boolean useSSL = true;

 public static void main(String args[]) throws Exception {
   App app = new App();
   final byte maxConnectionAttempt = 5;
   byte currentConnectionAttempt = 0;

   while (!app.connectDatabase() && currentConnectionAttempt < maxConnectionAttempt)
      ++currentConnectionAttempt;

   if (currentConnectionAttempt >= maxConnectionAttempt) {
      System.out.println(currentConnectionAttempt + " weren't successfull!");
         } else {
            app.printStatus();
            app.closeConnection();
         }
   }

   public void printStatus() {
         try {
            stmt = connect.createStatement();
            rs = stmt.executeQuery(STATUS_COMMAND);
            while (rs.next())
            System.out.println(rs.getString(1) + ": " + rs.getString(2));
         } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
            closeConnection();
         }
   }

   private void closeConnection() {
      try {
         if (rs != null) {
            rs.close();
         }

         if (stmt != null) {
            stmt.close();
         }

         if (connect != null) {
            connect.close();
         }
      } catch (Exception e) {
         System.out.println(e.getMessage());
      }
      System.out.println("Connection closed.");
   }

   public boolean connectDatabase() {
      // https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-connect-drivermanager.html
      try {
            Properties props = new Properties();
            props.setProperty("user", username);
            props.setProperty("password", password);
            props.setProperty("useSSL", Boolean.toString(useSSL));
            props.setProperty("sslMode", (useSSL ? "REQUIRED" : "DISABLED"));
            props.setProperty("requireSSL", Boolean.toString(useSSL));
            props.setProperty("verifyServerCertificate", Boolean.toString(useSSL));

            Class.forName("com.mysql.cj.jdbc.Driver");
            connect = DriverManager.getConnection("jdbc:" + url, props);
            return true;
      } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
      } catch (ClassNotFoundException ex) {
            System.out.println("Connector class can not be found: " + ex.getMessage());
      }
      return false;
   }
}

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

import pymysql
connection = pymysql.connect(
  host="hostname",
  port=32089,
  user="username",
  passwd="password",
  ssl_ca="/home/user/mysql_ca.crt",
  ssl_verify_cert=True,
  ssl_verify_identity=True)

cursor = connection.cursor()
cursor.execute("SHOW STATUS;")

for row in cursor:
    print(row[0] + "\t" + row[1])

cursor.close()
connection.close()

Driver TLS e supporto per i certificati proprietari del servizio

Tutte le connessioni a Databases for MySQL sono abilitate per 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 del certificato dal pannello Endpoints 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 al certificato al conducente o al cliente.

caption-side=bottom"
Endpoint*CLI

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

È possibile visualizzare il certificato decodificato per la propria distribuzione con il plugin CLI con il comando ibmcloud cdb deployment-cacert "your-service-name". Decodifica il base64 in testo. Copiare e salvare l'output del comando in un file e fornire il percorso del file al guidatore.

Altri Driver

MySQL ha un array di driver di lingua. La tabella seguente illustra alcuni dei più comuni. Per ulteriori informazioni, consultare i Connettori e le API MySQL's.

DriverMySQL
Lingua Unità Esempi
PHP mysql Supporto API per le transazioni
Ruby ruby-mysql L'API Ruby/MySQL
C# ODBC Guida per gli sviluppatori del connettore ODBC
Vai mysql Go-MySQL-Driver

Quando ci si connette a MySQL utilizzando PHP, è necessario modificare il plug-in di autenticazione da sha256_password a mysql_native_password.