我需要通过防火墙获得数据库连接,并限制可以运行的查询。 DBD :: Proxy似乎是完美的解决方案。但是,我目前正在使用DBIx :: Class,并且无法弄清楚如何将它们连接在一起。
特别是,DBD :: Proxy不接受SQL;它需要特定的命名查询。但DBIx :: Class似乎没有办法调用那些命名查询。
这是基于Catalyst的webapp。
答案 0 :(得分:1)
DBD :: Proxy确实需要SQL。它允许命名查询以方便。
没有方便的方法将DBIx :: Class与DBD :: Proxy命名查询一起使用,因为DBIx :: Class Object-Relational Mapper(ORM)的目的是提供SQL数据操作的面向对象视图语言(DML)语句。 DBD :: Proxy的命名查询功能不是DML语句,因此DBIx :: Class没有适合您需要的功能:将文字字符串直接传递给DBD :: Proxy驱动程序的prepare()函数。
一些不方便的方式:
不要使用DBIx :: Class。只需在DBI中完成。你可以使用Catalyst :: Model :: DBI,或者简单的DBI + catalyst :: Model :: Adapter +你自己的模型类。
不要使用命名查询。这意味着如果您计划使用命名查询来控制对数据库的访问,那么您需要移动查询授权 代码中的逻辑,用于调用控制器或模型中的数据库,具体取决于您构建应用程序的方式。