1

我需要通过防火墙获得数据库连接,并限制可以运行的查询。DBD::Proxy 似乎是解决这个问题的完美解决方案。但是,我目前正在使用 DBIx::Class,并且不知道如何将它们连接在一起。

特别是 DBD::Proxy 不使用 SQL;它需要特定的命名查询。但是 DBIx::Class 似乎没有办法调用这些命名查询。

这是在基于 Catalyst 的 web 应用程序中。

4

1 回答 1

1

DBD::Proxy 确实采用 SQL。为了方便起见,它允许命名查询。

没有方便的方法将 DBIx::Class 与 DBD::Proxy 命名查询一起使用,因为 DBIx::Class 对象关系映射器 (ORM) 的目的是呈现 SQL 的数据操作语言 (DML) 的面向对象视图) 陈述。DBD::Proxy 的命名查询特性不是 DML 语句,因此 DBIx::Class 没有满足您需求的特性:将文字字符串直接传递给 DBD::Proxy 驱动程序的 prepare() 函数。

一些不方便的方法:

  1. 不要使用 DBIx::Class。只需在 DBI 中进行即可。你可以使用 Catalyst::Model::DBI,或者普通的 DBI + catalyst::Model::Adaptor + 你自己的模型类。

  2. 不要使用命名查询。这意味着如果您打算使用命名查询作为控制对数据库的访问的一种方式,那么您需要将查询授权逻辑移动到在控制器或模型中调用数据库的代码中,具体取决于你是如何构建你的应用程序的。

于 2008-12-01T18:42:03.143 回答