Мне нужно получить соединение с базой данных через брандмауэр, а также ограничить количество выполняемых запросов. DBD :: Proxy кажется идеальным решением для этого. Однако в настоящее время я использую DBIx :: Class и не могу понять, как связать их вместе.
В частности, DBD :: Proxy не принимает SQL; он принимает конкретные именованные запросы. Но у DBIx :: Class, похоже, нет способа вызывать эти именованные запросы.
Это внутри веб-приложения на основе Catalyst.





DBD :: Proxy принимает SQL. Для удобства он позволяет использовать именованные запросы.
Не существует удобного способа использования DBIx :: Class с именованными запросами DBD :: Proxy, поскольку целью объектно-реляционного сопоставителя (ORM) DBIx :: Class является представление объектно-ориентированного представления языка манипулирования данными SQL (DML ) заявления. Именованная функция запроса DBD :: Proxy не является оператором DML, поэтому DBIx :: Class не имеет функции, которая соответствует вашим потребностям: передача буквальной строки непосредственно в функцию prepare () вашего драйвера DBD :: Proxy.
Несколько неудобных способов:
Не используйте DBIx :: Class. Просто сделайте это в DBI. Вы можете использовать Catalyst :: Model :: DBI или простой DBI + Catalyst :: Model :: Adapter + свой собственный класс модели.
Не используйте именованные запросы. Это означает, что если вы планировали использовать именованные запросы как способ управления доступом к базе данных, вам необходимо переместить авторизацию запроса. логику в код, который вызывает базу данных внутри вашего контроллера или модели, в зависимости от того, как вы создали свое приложение.
Это в значительной степени подтверждает то, что я ожидал. К сожалению, я не могу просто перенести контроль доступа в приложение, потому что цель состоит в том, чтобы защитить базу данных от компрометации веб-серверов, доступных из Интернета.