繁体   English   中英

执行用户创建的SQL查询

[英]Executing user created SQL queries

我需要知道是否存在运行直接来自用户的SQL查询的安全方法。 我们有一个管理工具,管理员可以通过每小时对数据库运行一次SQL查询来创建关键绩效指标。 问题在于此过程很容易受到用户错误或恶意用户发生的不良事件的影响(例如,用户可以轻松地从该查询中的表中删除数据)。 我想知道是否有一种安全的方法可以执行这些语句或事先知道它们将要执行的操作,因此如果他们执行除select之外的任何操作,我们将阻止它。

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

很少有其他建议

1,在查询中搜索DDL命令,如果存在则拒绝查询
2.尝试通过仅授予选择权限来限制权限
3.记录查询内容和提供查询的用户,这将有助于法医分析

听起来,最好的选择是允许查询由权限受限的用户(即只读用户)运行。 与此答案类似: 如何授予用户对所有数据库的只读访问权限

一些方法...

找到一个BI工具,使他们能够设计自己的报告。 构建一个多维数据集以支持它并放手一搏(BI工具将阻止更有害的查询,并确保它根据数据库的设置方式组合查询)

您可以将他们的查询另存为字符串,并执行一些子字符串功能来查找关键字,例如drop,delete,update或您认为是恶意的任何其他内容。 对于您而言,这似乎是一项艰苦的工作,因为字符串搜索从未如此有趣。

最后...权限起作用了,只是让它们变成只读。 不过,我有一种奇怪的感觉,那就是您所说的话不行。

作为最后的评论……删除和更新可能很危险,您还必须警惕设计得很糟糕的select语句。 从tbl1,tbl2,tbl3,tbl4,tbl5等中选择*。。。可以锁定数据库并消耗其获得的所有资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM