ForbesLindesay/atdatabases

Feature Request: SSL Connection Support for MySQL (@databases/mysql)

juvasquezg opened this issue · 1 comments

Feature Request: SSL Connection Support for MySQL

Description:

I would like to request support for SSL connections in the @databases/mysql package similar to how it is implemented in the mysql2 package. Currently, I need to use SSL connections for secure database connections, and having this feature in @databases/mysql would greatly benefit my use case.

Additional Context:

I am testing the code from the documentation:

const createConnectionPool = require('@databases/mysql');
const { sql } = require('@databases/mysql');

async function run() {
  // N.B. you will need to replace this connection
  // string with the correct string for your database.
  const db = createConnectionPool(
    "mysql://db_user:db_password@db_host:db_port/db_name",
  );

  const results = await db.query(sql`
    SELECT 1 + 1 as result;
  `);

  console.log(results);
  // => [{result: 2}]

  await db.dispose();
}

run().catch((err) => {
  console.error(err);
  process.exit(1);
});

However, I encountered the following error:

{
  uri: 'mysql://db_user:db_password@db_host:db_port/db_name,
  multipleStatements: true,
  timezone: 'local',
  typeCast: [Function: typeCast]
}
{
  maxSize: 10,
  maxUses: Infinity,
  idleTimeoutMilliseconds: 30000,
  queueTimeoutMilliseconds: 60000
}
Ignoring invalid configuration option passed to Connection: schema. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection
Error: Access denied for user 'db_user'@'db_host' (using password: YES)
...
{
  code: 'ER_ACCESS_DENIED_ERROR',
  errno: 1045,
  sqlState: '28000'
}

Providing the Certificate Authority (CA) in the configuration for mysql2 resolves any SSL-related issues.

```javascript
const mysql = require('mysql2/promise');

async function run() {
  const connection = await mysql.createConnection({
    host: 'db_host',
    user: 'db_user',
    password: 'db_password',
    database: 'db_name',
    port: 'db_port',
    ssl: {
      ca: require('fs').readFileSync('path/to/ca.pem'), // Provide the CA certificate path
    },
  });

  try {
    const [rows, fields] = await connection.execute('SELECT 1 + 1 as result');
    console.log(rows); // => [{result: 2}]
  } finally {
    connection.end();
  }
}

run().catch((err) => {
  console.error(err);
  process.exit(1);
});