【问题标题】:Connecting to Firebird on Linux from a CGI application under Apache gives permissions error从 Apache 下的 CGI 应用程序连接到 Linux 上的 Firebird 会出现权限错误
【发布时间】:2015-06-30 01:47:15
【问题描述】:

我正在 Linux 上用 Free Pascal 编写一个小程序,并连接到同一台服务器上的 Firebird 数据库。为了测试,我最初使用 FP 中的 TIBConnection 组件编写了一个控制台应用程序,并成功连接到 Firebird 数据库并列出了其中一个表中的记录。

现在我想从 Apache 下的 CGI 应用程序中做同样的事情。具有各种参数的示例 CGI 应用程序通过 WebBroker“操作”显示不同的 HTML 结果,如预期的那样。

因此,连接到 Firebird 和运行 CGI Web 应用程序的两个初步测试都成功了。最后的测试是将它们结合起来,这就是我的问题所在。

每当我运行测试 cgi 应用程序并尝试连接到 Firebird 数据库时,我都会收到“权限被拒绝”错误。我将用户名、密码和端口全部保留为默认值,检查了防火墙,在“localhost”和“127.0.0.1”之间切换以及其他几件事,包括将数据库文件的权限设置为全局读/写(例如当然是临时测试)。

我在互联网上找到了很多关于在 Linux 上连接到 Firebird 的信息,以及很多关于编写 CGI 应用程序的信息,但是很少有将这两个主题结合起来的信息。我确信存在一个微妙但重要的安全或防火墙问题,但我不知道。

  • 虚拟机上的 CentOS 6.6 64 位
  • 火鸟 2.1.7 64 位
  • Lazarus 1.4.0 64 位

有人对我可以尝试什么有什么建议吗?

【问题讨论】:

  • 使用您的控制台程序,您是否也通过服务器连接? Firebird 还有一个本地模式,与您的用户连接到数据库文件,而不是通过数据库服务器(及其用户)。 Firebird 服务器用户可能无法访问数据库文件(例如,该用户无权访问该文件),而您自己的用户确实有权访问。
  • 我没有使用嵌入式FB,所以相信控制台程序通过服务器连接。我将数据库文件的组设置为 apache,即运行 CGI 应用程序的用户,因此它应该拥有该文件的权限。
  • 本地连接 != 嵌入(尽管它几乎相同)。但是,如果您通过 Firebird 服务器连接,则不需要 apache 访问数据库文件,而是运行 Firebird 服务器的用户(通常是 firebird)需要对数据库文件具有权限。
  • 我误解了你所说的本地模式的意思。是的,Firebird 拥有数据库文件的权限——它归 firebird 用户所有。我可以使用不在 Apache 下运行的应用程序访问同一台机器上的同一个数据库。
  • 你能发布你用来连接的代码吗?

标签: linux apache cgi freepascal firebird2.1


【解决方案1】:

我通过阅读different problem 的解决方案了解了如何使其工作。不知道为什么禁用防火墙不起作用(我必须完全卸载它)并且还不知道 SELinux 是什么(必须将其设置为“允许”),但我需要研究这两个问题以便实时服务器不会受到攻击。

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多