2008-12-01 6 views
1

Мне нужно получить соединение с базой данных через брандмауэр, а также ограничить, какие запросы можно запустить. DBD :: Proxy кажется идеальным решением для этого. Тем не менее, я в настоящее время использую DBIx :: Class и не могу понять, как их связать.Как я могу использовать DBD :: Proxy с DBIx :: Class?

В частности, DBD :: Proxy не принимает SQL; он принимает конкретные именованные запросы. Но DBIx :: Class, похоже, не имеет способа вызвать эти именованные запросы.

Это находится внутри Catalyst-based webapp.

ответ

1

DBD :: Proxy принимает SQL. Это позволяет использовать именованные запросы в качестве удобства.

Невозможно использовать DBIx :: Class с DBD :: Proxy с именем queries, так как целью объектно-реляционного Mapper (ORM) DBIx :: Class является представление объектно-ориентированного представления данных SQL Манипуляции (DML). Именованная функция запроса DBD :: Proxy не является оператором DML, поэтому DBIx :: Class не имеет функции, которая соответствует вашим потребностям: передача литеральной строки непосредственно функции prepare() вашего драйвера DBD :: Proxy.

Некоторые неудобные способы:

  1. Не используйте DBIx :: Class. Просто сделайте это в DBI. Вы можете использовать Catalyst :: Model :: DBI или простой DBI + катализатор :: Model :: Adapter + свой собственный класс модели.

  2. Не используйте именованные запросы. Это означает, что если вы планируете использовать именованные запросы в качестве способа контроля доступа к базе данных, вам нужно будет переместить авторизацию запроса в код, который вызывает вызов в базу данных внутри вашего контроллера или модели, в зависимости от о том, как вы создали свое приложение.

+0

Это в значительной степени подтверждает то, что я ожидал. К сожалению, я не могу просто переместить элемент управления доступом в приложение, потому что целью является защита базы данных от компрометации веб-серверов, доступных через Интернет. – derobert 2008-12-01 21:30:23