执行用户创建的SQL查询

时间:2016-08-04 16:40:46

标签: c# sql postgresql

我需要知道是否有一种安全的方法来运行直接来自用户的SQL查询。我们有一个管理工具,管理员可以通过提供每小时对数据库运行的SQL查询来创建关键性能指标。问题是这个过程显然容易受到用户错误或恶意用户发生的不良事件的影响(例如,用户可以轻松地从该查询中的表中删除数据)。我想知道是否有一种安全的方法来执行这些语句或者事先知道他们要做什么,所以如果他们做的是除了select之外我们可以阻止它。

一个建议是在事务中运行SQL,然后每次只回滚事务。这是一个不错的解决方案吗?

3 个答案:

答案 0 :(得分:2)

更多建议

1.在查询中搜索DDL命令并拒绝查询(如果存在) 2.通过仅在可能的情况下授予限制来尝试限制权限 3.记录查询和提供查询的用户,这将有助于取证分析

答案 1 :(得分:2)

听起来你最好的选择可能是允许查询由具有有限权限的用户(即只读用户)运行。与此答案类似:How to grant users read-only access to all databases

答案 2 :(得分:2)

一些方法......

找到一个BI工具,使他们能够设计自己的报告。构建一个多维数据集来支持它并让它们疯狂(BI工具可以防止更有害的查询,并确保它根据您的数据库设置方式组装查询)

您可以将查询保存为字符串,并执行一些子字符串函数来查找关键字,如删除,删除,更新或其他您可能认为是恶意的内容。这对你来说似乎是一种艰苦的工作方法,因为字符串搜索永远不会那么有趣。

最后......权限工作,只需将它们变成只读的东西。我有一种奇怪的感觉,就像你说的那样,不管怎么说。

作为最后的评论......像删除和更新一样危险,你也必须对可怕的设计选择语句保持警惕。从tbl1,tbl2,tbl3,tbl4,tbl5等中选择* ...可能会锁定您的数据库并使用它所获得的每个资源。