在Oracle(PL / SQL)中执行动态SQL并确保安全性
如果我有一个有效的SQL字符串;无论如何我可以在我的PL / SQL中执行它 – 但保证它只是一个SELECT语句…没有进行复杂的解析以确保它没有任何转义字符/嵌套命令或任何爵士乐? 编辑: 我真正想要实现的是一个通用的,内置于??我的应用程序,查询工具.它具有友好的,特定于域的GUI,并允许非技术用户创建相当复杂的查询.该工具处理搜索的版本控制,在需要的地方添加内部连接,以及一些其他特定于应用程序的东西,您将找不到典型的SQL DEV类型工具. 应用程序成功创建SQL查询.问题是我还允许用户直接输入自己的SQL.我担心潜在的SQL注入类型问题. 我不确定这是不是合适的地方;但是,除了这个问题 – 如果有人能推荐一本能让我加快这种性质的甲骨文的好书 – 我非常感激. 解决方法一种解决方案是只授予用户SELECT权限,如果这是用户被授权的唯一权限.见“Oracle Database Security Guide: Introduction to Privileges” 但是,我认为您的应用程序不一定是安全的,因为您将查询限制为SELECT.当您允许不安全地使用SELECT查询时,可能存在恶作剧的示例. 你澄清的问题:我已经研究过SQL注入并写了很多.我可以建议的一般规则是:永远不要将用户输入作为代码执行.这就是SQL注入的方式. 您可以设计特定于域的语言并将用户输入映射到SQL操作,但要确保有一个层将用户选择转换为数据库模式.如果通过引入映射层将用户输入与SQL代码分开,那么您应该没问题. 另见我对“How do I protect this function from sql injection”的回答. (编辑:上海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |