让笔记本电脑直接对数据库进行CRUD操作是不是一个坏主意?
Is it a bad idea to let laptops directly perform CRUD operations on databases?
我开发了一个 Excel 插件,并向我雇主的 IT 部门推介。加载项创建 SELECT、INSERT、DELETE 和 UPDATE SQL 语句,这些语句被发送到 PostgreSQL 数据库和任何结果(在 SELECT 语句的情况下) 返回给 Excel 进行报告。
我的团队对此印象深刻,但 IT 部门表示他们不允许笔记本电脑直接对数据库执行 CRUD 操作。相反,IT 已经设置了特定的环境来执行此操作。
有人可以告诉我 IT 对笔记本电脑直接连接到数据库并执行 CRUD 操作的担忧是否有意义?这是一个合理的担忧吗?
如果笔记本电脑、它们的用户和任何其他有权访问它们的人、网络连接和客户端软件都是可信的,那么当数据库结构不可避免地发生变化时,您总是可以立即向客户端推送更新。未来,那就OK了。
否则不是。标准方法是在两者之间放置某种服务,充当看门人并定义允许对数据库进行的操作以及允许谁执行这些操作。 REST(或者如果你是企业级的,SOAP)是两个流行的选择。在这些情况下,不要通过网络发送 SQL。
对于某些数据库引擎,理论上可以让用户直接通过数据库进行身份验证,并使用数据库的权限模型来限制他们可以执行的操作。例如,您只能允许用户执行某些存储过程。但在实践中,这可能比它的价值更麻烦。
老实说在实践中可能不太行。有太多东西不能同时信任。
是的,这是一个合理的问题。有人可以轻松地将 SQL 命令注入您的数据库。他们也许能够执行擦除整个数据库的操作。
假设您的软件本身有这个代码:"SELECT $var1 FROM TEST WHERE $var2"
并且用户可以修改 var1 和 var2。如果他们现在将 "date > 10; DROP *"
放入 var2,您的语句将变为 "SELECT $var1 FROM TEST WHERE date > 10; DROP *;"
它比那复杂一点,但你应该继续阅读 SQL Injection。
我开发了一个 Excel 插件,并向我雇主的 IT 部门推介。加载项创建 SELECT、INSERT、DELETE 和 UPDATE SQL 语句,这些语句被发送到 PostgreSQL 数据库和任何结果(在 SELECT 语句的情况下) 返回给 Excel 进行报告。
我的团队对此印象深刻,但 IT 部门表示他们不允许笔记本电脑直接对数据库执行 CRUD 操作。相反,IT 已经设置了特定的环境来执行此操作。
有人可以告诉我 IT 对笔记本电脑直接连接到数据库并执行 CRUD 操作的担忧是否有意义?这是一个合理的担忧吗?
如果笔记本电脑、它们的用户和任何其他有权访问它们的人、网络连接和客户端软件都是可信的,那么当数据库结构不可避免地发生变化时,您总是可以立即向客户端推送更新。未来,那就OK了。
否则不是。标准方法是在两者之间放置某种服务,充当看门人并定义允许对数据库进行的操作以及允许谁执行这些操作。 REST(或者如果你是企业级的,SOAP)是两个流行的选择。在这些情况下,不要通过网络发送 SQL。
对于某些数据库引擎,理论上可以让用户直接通过数据库进行身份验证,并使用数据库的权限模型来限制他们可以执行的操作。例如,您只能允许用户执行某些存储过程。但在实践中,这可能比它的价值更麻烦。
老实说在实践中可能不太行。有太多东西不能同时信任。
是的,这是一个合理的问题。有人可以轻松地将 SQL 命令注入您的数据库。他们也许能够执行擦除整个数据库的操作。
假设您的软件本身有这个代码:"SELECT $var1 FROM TEST WHERE $var2"
并且用户可以修改 var1 和 var2。如果他们现在将 "date > 10; DROP *"
放入 var2,您的语句将变为 "SELECT $var1 FROM TEST WHERE date > 10; DROP *;"
它比那复杂一点,但你应该继续阅读 SQL Injection。