Ошибки удаленного подключения к облаку Google SQL из GCE в perl - PullRequest
1 голос
/ 05 февраля 2020

Использование Perl в DBD Debian Buster: mysql 4.0502.

my $dbh = DBI->connect_cached(
  'DBI:mysql:<db>:<host>;mysql_ssl=1;mysql_ssl_ca_file=/etc/ssl/mysql/server-ca.pem;mysql_ssl_client_cert=/etc/ssl/mysql/client-cert.pem;mysql_ssl_client_key=/etc/ssl/mysql/client-key.pem', 
  <username>, <pass>);

Попытка подключиться к экземпляру Google Cloud SQL (Mysql) по SSL, и я неоднократно бывал получаю ошибку: SSL connection error: Error while reading file. и SSL connection error: Error in the certificate.

Я запустил chown над каталогом, чтобы переместить владение на mysql: mysql, попробовал различные конфигурации владения и даже переместил каталоги .

Я подключился через CLI, используя те же аргументы, что и в сценарии, подключен через сценарий через незащищенный SSL с хоста, но как только я ограничиваю подключения только через SSL и использую эти команды, появляется та же ошибка ,

Обновление: после того, как я еще немного покопался в этом, я считаю, что проблема заключается в том, как Google подписывает имя хоста для своего клиентского ключа и сертификатов ( Проверка сертификата в облаке SQL). Это предложение не работает с DBD :: mysql Perl, поскольку они решили принудительно проверять имя хоста при использовании SSL (https://github.com/perl5-dbi/DBD-mysql/issues/110).

Я все еще ищу решение этой проблемы в ее нынешнем виде, но сейчас я смотрю на частные IP-адреса и VPC на будущее.

1 Ответ

1 голос
/ 11 февраля 2020

На момент написания этой статьи Perl не поддерживается для взаимодействия с Google Cloud Platform. Даже если вам удастся внедрить сценарий perl для подключения к экземпляру Cloud SQL, есть вероятность, что решение однажды перестанет работать, если оно носит характер ad h c. Несколько клиентских библиотек для множества других языков действительно реализованы и активно поддерживаются. Если вы хотите взаимодействовать со службами GCP программно, я настоятельно рекомендую переключиться на одну из этих библиотек. Более того, вы можете получить прямую помощь в случае возникновения каких-либо неудобств со стороны службы поддержки или с помощью проблемы с Github.

С учетом вышесказанного возможный обходной путь может заключаться в том, чтобы вызвать клиента mysql из сценария perl как вы бы сделали в linux оболочке. Идея состоит в том, чтобы записать ваши операторы sql в файл и запустить инструмент командной строки mysql, который передает файл операторов. Есть очевидные предостережения с этим подходом, и он не работает вообще, если вам нужен интерактивный сеанс, но может выполнять работу по запуску простых задач из сценария perl. Я делюсь небольшим фрагментом, который я сделал.

-- sql statements file
show databases;
#!/usr/bin/perl
$data = `mysql --user=root --password=XXX  --host=XXX.XXX.XXX.XXX < file.sql`;
print("$data");

Имейте в виду, что использование пароля таким способом - ужасная идея с точки зрения безопасности. Кроме того, этот подход должен вносить в белый список внешний IP-адрес GCE на вкладке Подключения вашего SQL экземпляра, как показано здесь .


РЕДАКТИРОВАТЬ: Список поддерживаемые библиотеки для подключения к Cloud SQL можно найти здесь , почти все из них требуют использования cloud_sql_proxy, конфигурация которого описана в том же документе (прокрутка вверх).

Кроме того, есть также библиотеки, которые позволяют управлять вашими экземплярами, как если бы вы использовали инструмент командной строки gcloud, который можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...