让笔记本电脑直接在数据库上执行CRUD操作是一个坏主意吗?

时间:2016-06-28 23:39:02

标签: ado.net connection database-connection ado

我开发了一个Excel加载项,我向我的雇主的IT部门提出了建议。该加载项创建发送到PostgreSQL数据库的SELECT,INSERT,DELETE和UPDATE SQL语句,并将任何结果(在SELECT语句的情况下)返回到Excel进行报告。

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

有人能告诉我,如果笔记本电脑直接连接到数据库并执行CRUD操作是否有意义?这是一个有效的问题吗?

2 个答案:

答案 0 :(得分:3)

如果笔记本电脑,他们的用户以及其他任何有权访问它们的人,网络连接和客户端软件都是可信的,并且当数据库结构将来不可避免地发生变化时,您可以随时立即将更新推送到客户端,那没关系。

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

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

说实话,这可能不行。这是太多值得信赖的事情了。

答案 1 :(得分:1)

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

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

有点复杂,但你应该阅读SQL Injection