【问题标题】:SQL vs XML for data transfer用于数据传输的 SQL 与 XML
【发布时间】:2013-03-26 19:35:30
【问题描述】:

我是网络服务和网络 API 领域的新手。我注意到大多数公司都提供基于 XML 或 JSON 的连接,基本上从他们的数据库中获取数据并将其编码为他们选择的格式。我的问题是,为什么我没有看到有人提供某种 SQL 连接?

起初我认为这是安全性。但是使用 MySQL,您可以将用户访问权限一直限制到特定列。您可以允许他们仅查看或仅插入。您可以创建视图和存储过程来执行连接或掩盖您真正的后端结构。您可以使用 ssl 连接对传输的数据进行正确编码。所以我真的认为唯一的区别是风格。在我看来,人们宁愿让我写

$conn->getWidgetAttr('widgetName');

而不是

SELECT widgetName FROM widgets;

谁能告诉我这里缺少什么?

【问题讨论】:

    标签: mysql xml data-transfer


    【解决方案1】:
    1. 配置复杂性。对于所有可能的用例,很难为所有用户配置权限。
    2. 安全。暴露数据库连接和查询是不安全的,并且提供了广泛的 sql 注入/利用攻击的可能性。
    3. 合同稳定性。隐藏有关如何存储在数据库中的项目的实现细节允许您在不破坏现有客户端的情况下更改底层存储。例如,在某一时刻,您可能决定将 sql server 替换为 mongodb。
    4. 防火墙问题。 Http 连接广泛可用,80 端口对大多数使用 web api 的操作开放,而暴露 sql server 端口(默认 1433)可能会增加额外的部署成本。

    【讨论】:

    • +1 API 版本控制也很重要。底层数据模型是否应该改变。
    • 我会同意除安全性之外的所有观点。当脚本没有正确地转义从用户接收到的输入并将其放入由 mysql 用户运行的查询中时,就会发生 SQL 注入,该查询的权限高于用户应有权访问的权限。例如,如果 mysql 用户仅被授予对单个表的选择权限,那么再多的 sql 注入都不会导致查询执行除从该表中选择之外的任何操作。即便如此,仅配置的复杂性就足以成为不想实现这样的事情的理由。感谢您的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多