【问题标题】:Directly accessing server database via Ajax (without PHP or some other intermediate)通过 Ajax 直接访问服务器数据库(无需 PHP 或其他中间体)
【发布时间】:2011-01-16 09:53:09
【问题描述】:

借助 jQuery 等强大的框架,似乎可以在客户端构建整个应用程序逻辑。这非常类似于将客户端应用程序构建为原生程序。

现在假设这个客户端应用需要访问远程数据库。通常的解决方案似乎涉及 Ajax/PHP/MySQL 层。

在我看来,PHP 层不再需要了;所有的逻辑和 UI 都由浏览器应用处理。

那么问题是:不应该存在一个(希望是健壮和安全的)数据库服务器来简单地接受 HTTP 请求并返回 XML 结果吗?然后可以很容易地解析这个结果,例如客户端的 jQuery。

我似乎无法找到符合这些思路的数据库或框架。有什么想法吗?

【问题讨论】:

    标签: php jquery mysql ajax


    【解决方案1】:

    你的意思是,有没有原生支持 HTTP 协议的数据库?嗯,有一些。你有 MonetDB/XQuery (http://monetdb.cwi.nl/XQuery/QuickTour/XRPC/) 和像 CouchDB (http://couchdb.apache.org/) 这样的 NoSQL 数据库。您还可以在更传统的 rdbms-es 中使用它,例如 Oracle(Oracle Application Express 依赖于内置 HTTP 服务器,即 APEX 服务 http://www.oracle.com/technology/products/database/application_express/index.html)和 MS SQL(服务模式对象,如 http://msdn.microsoft.com/en-us/library/ms190332.aspx 和 XML 视图,请参阅 @ 987654325@)

    但真的 - 你应该质疑这是否真的那么有用。

    我的意思是,总会有一个组件处理 HTTP。您可能会觉得去掉 webserver/php 层很好,因为您觉得它是多余的,位于应用程序和数据库之间。但实际上,我刚才提到的解决方案并没有那么不同——它们被标记在同一个软件之上,但数据仍然必须流过那个额外的层。

    您可能想知道,将所有功能合二为一是否真的有益:使用单独的 Web 服务器,您可以独立于数据库服务器横向扩展 Web 服务器层。或者,您可以独立于 Web 服务器层向外扩展数据库层。如果它都是一个软件,你不能。

    基本上,通过将 http 服务器构建到数据库中,您会为 db 服务器增加一项任务,该任务消耗本可以用于其他 db 任务的资源。现在考虑一个常见的情况,您为数据库的每个处理器许可证付费。当您可以使用像 apache 这样的免费网络服务器完全做到这一点时,您真的愿意将该许可证用于让 db 处理 HTTP 请求吗?即使您使用的是免费的软数据库产品,在许多情况下数据库服务器也是一个瓶颈。您真的想通过在其中构建 HTTP 服务器来完成更多任务吗?

    我认为这不是一个好主意还有另一个原因。您提到 XML 作为数据交换格式。好啊。但是如果你想要 JSON 怎么办?还是 YAML?或者也许是普通的 CSV?像 PHP、ASP.NET、Perl 甚至 Java 这样的 Web 服务器脚本语言都有非常好的库来处理这些事情。典型的数据库存储过程语言没有。当然,你可以更进一步说,见鬼,为什么不将 Java 或 .NET 构建到数据库中,但这又把问题颠倒过来了 - 数据库的任务是存储和检索数据,并做好在存储数据的同时照顾数据。处理数据以将其呈现给应用程序不是其中的一部分。如果你把它作为数据库工作的一部分来处理它,你就失去了整个系统的灵活性和可伸缩性的重要来源。您可能会觉得它的开销更少,因为需要考虑的组件更少(即网络服务器/脚本语言),但实际上,它仍然存在,它只是隐藏在您的数据库软件中,并吸收了本可以用于的资源存储和检索数据、解析查询等

    【讨论】:

      【解决方案2】:

      好吧,令人讨厌的部分将是身份验证。

      由于代码完全在客户端运行,因此客户端知道所有身份验证详细信息以访问数据库服务器。

      这相当……错误……不安全。这可能就是为什么没有多少人开发直接访问服务器的原因..

      如果您真的想将 PHP/服务器端脚本保持在最低限度,请制作一个相当强大的 PHP 代理,而不是正确地转义所有数据。将配置详细信息保存在单独的受保护的 ini 文件中,甚至是 php.ini 文件中,之后您几乎可以忽略服务器端脚本。

      【讨论】:

      • 我已经阅读并重新阅读了这个答案,但我一直不相信......将它与邮件客户端和邮件服务器进行比较。邮件客户端知道如何连接到邮件服务器并读取邮箱本质上是不安全的吗?为什么这与数据库帐户如此不同?当然,您必须对您的数据库帐户应用适当的权限——这是 Web 应用程序通常不会做的事情——但这并没有改变,您可以像使用邮件帐户一样完美地保护数据库帐户。
      • @Roland 你可以让每个用户都有一个数据库帐户。但是每个用户也必须拥有自己的数据库,除非您能够按表定义权限,在这种情况下,每个用户都需要自己的表。 (类似于邮箱)
      • 这就是我的观点 Chacha102。在所有主要的 rdbms-es 中,您都可以为每个表授予权限。您甚至可以按列授予它们。它并不止于表和列,存储的例程和视图等都可以单独授予。并且管理一些 rdbms-es 支持角色,因此您可以分发相关权限包。如果您真的需要,您甚至可以在数据库级别实现行级权限(使用视图和/或存储过程)。
      【解决方案3】:

      我想可以做到这一点,但 PHP 更便于操作结果集。此外,传统方法提供了额外的安全级别,因此野外机器无法直接访问数据库,并且可以使用所有常见的网络服务器安全和访问控制。

      【讨论】:

        猜你喜欢
        • 2010-11-22
        • 2012-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 2020-10-02
        • 2015-02-17
        • 2016-01-04
        相关资源
        最近更新 更多