我很确定这是一个愚蠢的想法,但我想知道为什么,所以请耐心等待。
后端开发人员所做的许多工作是通过 HTTP 向客户提供 CRUD 访问,本质上是将数据从内部数据库映射到内部数据库。客户通过加密连接使用某种凭据向 Web 服务授权,Web 服务验证数据并对后端数据库执行查询,然后将结果返回给客户端。
总而言之,这只是直接与数据库交互的一种更糟糕的方式:几乎没有人完全实现 REST 规范,而且迟早你总是会使用自制的通用过滤、排序或分页——而 SQL 支持所有这些已经。
这让我想知道:为什么不让客户通过暴露 SQL 端口来访问数据库,完全跳过 HTTP API?这有很多优点:
- 客户端必须使用客户端证书加密连接
- 我们可以使用服务器内置的访问控制,或者只使用每个客户的分片数据库
- (My-)SQL 权限非常细粒度,所以我敢打赌不应该有任何明显的安全问题
- 性能应该会更好,因为我们跳过了整个 HTTP 通信和 Web 应用程序代码
- 新功能是数据库迁移的问题,一切都反映在架构中
- 为用户提供强大的查询能力,无需任何额外的努力
缺点似乎包括无法支持多个模式版本,尽管我认为谨慎的弃用(可能还有客户端 SDK)应该使影响最小化。
由于似乎没有人这样做,因此我必须忽略安全风险。为什么我们不能为客户提供公共 SQL 访问?什么可能出错?(请记住,这只是一个出于好奇而产生的思想实验)