【问题标题】:Is it a bad idea to let laptops directly perform CRUD operations on databases?让笔记本电脑直接对数据库执行 CRUD 操作是不是一个坏主意?
【发布时间】:2016-06-28 23:39:02
【问题描述】:

我开发了一个 Excel 加载项,我向雇主的 IT 部门进行了推介。加载项创建 SELECT、INSERT、DELETE 和 UPDATE SQL 语句,这些语句发送到 PostgreSQL 数据库,任何结果(在 SELECT 语句的情况下)都返回到 Excel 以进行报告。

我的团队对此印象深刻,但 IT 表示他们不允许笔记本电脑直接在数据库上执行 CRUD 操作。相反,IT 已经设置了某些环境来执行此操作。

谁能告诉我 IT 对笔记本电脑直接连接到数据库并执行 CRUD 操作的担忧是否有意义?这是一个有效的担忧吗?

【问题讨论】:

    标签: ado.net connection database-connection ado


    【解决方案1】:

    如果笔记本电脑、其用户和任何其他有权访问它们的人、网络连接和客户端软件都是可信的,那么当未来数据库结构不可避免地发生变化时,您始终可以立即向客户端推送更新,那么就可以了。

    否则不是。标准方法是在两者之间放置某种服务,充当看门人,并定义数据库上允许的操作以及允许执行这些操作的人。 REST(或者如果你是企业级的,SOAP)是两个流行的选择。在这些情况下,不要通过网络发送 SQL。

    对于某些数据库引擎,理论上可能让用户直接使用数据库进行身份验证并使用数据库的权限模型来限制他们可以做什么。例如,您只能允许用户执行某些存储过程。但在实践中,这可能比它的价值更麻烦。

    说实话,在实践中可能不太好。有太多东西不能同时信任。

    【讨论】:

    • 谢谢,马蒂!我几乎肯定以上所有内容都是可信的,更不用说我的加载项将位于我公司共享驱动器上的一个安全文件夹中,我必须先向用户授予权限,然后他们才能访问加载项。但是,让我们说上面的东西是不可信的。提示用户登录会是您所指的服务吗?
    • 请注意,网络上的任何用户都可以使用不同/被黑的客户端软件版本。也许这使他们成为不受信任的用户,也许只是高级用户。除了方便之外,最好不要依赖客户端软件中内置的检查。
    • @christopheralan88:我用一些流行的服务选项更新了我的答案。从安全角度来看,除了“他们在网络中”之外的某种身份验证是一个非常好的主意。登录或单点登录都可以。
    【解决方案2】:

    是的,这是一个有效的担忧。有人可以轻松地将 SQL 命令注入您的数据库。他们可能能够执行擦除整个数据库的操作。

    假设您的软件本身具有此编码:"SELECT $var1 FROM TEST WHERE $var2",并且用户可以修改 var1 和 var2。如果他们将 "date > 10; DROP *" 放入 var2 中,那么您的声明将变为 "SELECT $var1 FROM TEST WHERE date > 10; DROP *;"

    比这要复杂一些,但你应该阅读SQL Injection

    【讨论】:

    • 可能不止这些。使用 SQL 注入,您可以“只”弄乱参数。通过直接的 SQL 连接,您可以完全组成自己的 SQL 语句。
    • 是的,只需查看数据库模式表,他们就可以查看 SQL 数据库中的每个表。他们甚至可能会找到与他们应该可以访问的完全不同的事物相关的内容。
    • @christopheralan88:您可以通过三层架构来防止这种情况发生:在数据库和客户端应用程序之间有一个服务器。服务器仅以(服务器端)程序员提供的方式与数据库对话。它强制执行权限并且不允许客户端执行任意查询。
    • 对于两层应用程序(客户端直接与数据库对话),您可以尝试在数据库级别锁定权限(也可以通过提供存储过程)。但这种方法更加有限和乏味(如果你犯了错误也很危险)。
    • @christopheralan88 限制用户访问会有所帮助,但在没有任何中间人的情况下授予他们访问权限仍然存在风险。一个 3 层系统会很棒,因为它可以像 Matt 在他的回答中概述的那样充当过滤器。
    猜你喜欢
    • 2011-01-14
    • 2013-08-23
    • 2020-12-19
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    相关资源
    最近更新 更多