

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Interazione con i database MySQL utilizzando l'estensione mysql\$1fdw
<a name="postgresql-mysql-fdw"></a>

Per accedere a un database compatibile con MySQL dall'istanza database RDS per PostgreSQL è possibile installare e utilizzare l'estensione `mysql_fdw`. Questo wrapper di dati esterni consente di interagire con RDS per MySQL, Aurora MySQL, MariaDB e altri database compatibili con MySQL. La connessione dall'istanza database RDS per PostgreSQL al database MySQL è crittografata in base al miglior tentativo a seconda delle configurazioni di client e server. Tuttavia, se lo si desidera, è possibile imporre l'utilizzo della crittografia. Per ulteriori informazioni, consulta [Utilizzo della crittografia in transito con l'estensione](#postgresql-mysql-fdw.encryption-in-transit). 

L'estensione `mysql_fdw` è supportata su Amazon RDS per PostgreSQL 14.2, 13.6 e versioni successive. Supporta le operazioni di select, insert, update e delete da un database RDS for PostgreSQL su tabelle contenuto in un'istanza database compatibile con MySQL. 

**Topics**
+ [Configurazione del database RDS per PostgreSQL per l'utilizzo dell'estensione mysql\$1fdw](#postgresql-mysql-fdw.setting-up)
+ [Esempio: utilizzo di un database RDS per MySQL da RDS per PostgreSQL](#postgresql-mysql-fdw.using-mysql_fdw)
+ [Utilizzo della crittografia in transito con l'estensione](#postgresql-mysql-fdw.encryption-in-transit)

## Configurazione del database RDS per PostgreSQL per l'utilizzo dell'estensione mysql\$1fdw
<a name="postgresql-mysql-fdw.setting-up"></a>

La configurazione dell'estensione `mysql_fdw` sull'istanza database RDS per PostgreSQL comporta il caricamento dell'estensione nell'istanza database e quindi la creazione del punto di connessione all'istanza database MySQL. Per tale attività, è necessario disporre delle seguenti informazioni sull'istanza database MySQL:
+ Nome host o endpoint. Per trovare l'endpoint di un'istanza database RDS per MySQL è possibile utilizzare la console. Scegliere la scheda Connectivity & security (Connettività e sicurezza) e cercare nella sezione Endpoint and port (Endpoint e porta). 
+ Numero della porta. La porta di default per MySQL è 3306. 
+ Nome del database. L'identificatore del database. 

È inoltre necessario fornire l'accesso al gruppo di sicurezza o alla lista di controllo degli accessi (ACL) per la porta MySQL 3306. L'istanza database RDS per PostgreSQL e l'istanza database RDS per MySQL necessitano dell'accesso alla porta 3306. Se l'accesso non è configurato correttamente, quando si cerca di connettersi alla tabella compatibile con MySQL comparirà un messaggio di errore simile al seguente:

```
ERROR: failed to connect to MySQL: Can't connect to MySQL server on 'hostname.aws-region.rds.amazonaws.com:3306' (110)
```

Nella seguente procedura, l'utente (utilizzando l'account `rds_superuser`) crea il server esterno. Quindi concede l'accesso al server esterno a specifici utenti. Questi utenti creano quindi i propri mapping agli account utente MySQL appropriati per interagire con l'istanza database MySQL. 

**Per utilizzare mysql\$1fdw per accedere al server database MySQL**

1. Effettuare la connessione all'istanza database PostgreSQL utilizzando un account che dispone del ruolo `rds_superuser`. Se al momento della creazione dell'istanza database RDS per PostgreSQL sono stati accettati i valori predefiniti, il nome utente è `postgres` e lo strumento a riga di comando `psql` può essere usato per collegarsi come segue:

   ```
   psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=postgres –-password
   ```

1. Installare l'estensione `mysql_fdw` come segue:

   ```
   postgres=> CREATE EXTENSION mysql_fdw;
   CREATE EXTENSION
   ```

Dopo aver installato l'estensione sull'istanza database RDS per PostgreSQL imposta il server esterno che fornisce la connessione a un database MySQL.

**Per creare il server esterno**

Esegui queste attività sull'istanza database RDS per PostgreSQL. La procedura presuppone che l'utente sia connesso come utente con i privilegi di `rds_superuser`, come `postgres`. 

1. Creazione di un server esterno nell'istanza database RDS for PostgreSQL:

   ```
   postgres=> CREATE SERVER mysql-db FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'db-name.111122223333.aws-region.rds.amazonaws.com', port '3306');
   CREATE SERVER
   ```

1. Concedere agli utenti appropriati l'accesso al server esterno. Questi dovrebbero essere utenti non amministratori, cioè utenti senza il ruolo `rds_superuser`.

   ```
   postgres=> GRANT USAGE ON FOREIGN SERVER mysql-db to user1;
   GRANT
   ```

Gli utenti PostgreSQL creano e gestiscono le proprie connessioni al database MySQL tramite il server esterno.

## Esempio: utilizzo di un database RDS per MySQL da RDS per PostgreSQL
<a name="postgresql-mysql-fdw.using-mysql_fdw"></a>

Supponi di disporre di una semplice tabella su un'istanza database RDS per PostgreSQL. Gli utenti di RDS per PostgreSQL desiderano eseguire query sugli elementi (`SELECT`), `INSERT`, `UPDATE` e `DELETE` contenute in tale tabella. Supponiamo che l'estensione `mysql_fdw` sia stata creata nell'istanza database RDS for PostgreSQL, come descritto nella procedura precedente. Dopo aver effettuato la connessione all'istanza database RDS for PostgreSQL come utente con i privilegi `rds_superuser`, è possibile procedere con i seguenti passaggi. 

1. Nell'istanza database RDS per PostgreSQL crea un server esterno: 

   ```
   test=> CREATE SERVER mysqldb FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'your-DB.aws-region.rds.amazonaws.com', port '3306');
   CREATE SERVER
   ```

1. Concedere l'utilizzo a un utente che non dispone delle autorizzazioni `rds_superuser`, ad esempio `user1`:

   ```
   test=> GRANT USAGE ON FOREIGN SERVER mysqldb TO user1;
   GRANT
   ```

1. Connect as*user1*, quindi crea una mappatura per l'utente MySQL: 

   ```
   test=> CREATE USER MAPPING FOR user1 SERVER mysqldb OPTIONS (username 'myuser', password 'mypassword');
   CREATE USER MAPPING
   ```

1. Creare di una tabella esterna collegata a una tabella MySQL:

   ```
   test=> CREATE FOREIGN TABLE mytab (a int, b text) SERVER mysqldb OPTIONS (dbname 'test', table_name '');
   CREATE FOREIGN TABLE
   ```

1. Eseguire una semplice query sulla tabella esterna:

   ```
   test=> SELECT * FROM mytab;
   a |   b
   ---+-------
   1 | apple
   (1 row)
   ```

1. È possibile aggiungere, modificare e rimuovere i dati dalla tabella MySQL. Ad esempio:

   ```
   test=> INSERT INTO mytab values (2, 'mango');
   INSERT 0 1
   ```

   Eseguire nuovamente la query `SELECT` per visualizzare i risultati:

   ```
   test=> SELECT * FROM mytab ORDER BY 1;
    a |   b
   ---+-------
   1 | apple
   2 | mango
   (2 rows)
   ```

## Utilizzo della crittografia in transito con l'estensione
<a name="postgresql-mysql-fdw.encryption-in-transit"></a>

La connessione a MySQL da RDS per PostgreSQL utilizza la crittografia in transito (TLS/SSL) per impostazione predefinita. Tuttavia, la connessione torna a essere non crittografata quando la configurazione di client e server differiscono. È possibile applicare la crittografia a tutte le connessioni in uscita specificando l'opzione `REQUIRE SSL` sugli account utente RDS for MySQL. Lo stesso approccio funziona anche per gli account utente MariaDB e Aurora MySQL. 

Per gli account utente MySQL configurati su `REQUIRE SSL`, il tentativo di connessione non riesce se non è possibile stabilire una connessione sicura.

Per applicare la crittografia agli account utente esistenti del database MySQL è possibile utilizzare il comando `ALTER USER`. La sintassi varia a seconda della versione MySQL, come mostrato nella tabella seguente. Per ulteriori informazioni, consultare la voce [ALTER USER](https://dev.mysql.com/doc/refman/8.0/en/alter-user.html) nel *Manuale di riferimento di MySQL*.


| MySQL 5.7, MySQL 8.0 | MySQL 5.6 | 
| --- | --- | 
|  `ALTER USER 'user'@'%' REQUIRE SSL;`  |  `GRANT USAGE ON *.* to 'user'@'%' REQUIRE SSL;`  | 

Per ulteriori informazioni sull'estensione `mysql_fdw`, consultare la documentazione di [mysql\$1fdw](https://github.com/EnterpriseDB/mysql_fdw). 