Rob*_* P. 3 sql database security oracle
如果我有一个有效的SQL字符串; 无论如何我可以在我的PL/SQL中执行它 - 但保证它只是一个SELECT语句...没有进行复杂的解析以确保它没有任何转义字符/嵌套命令或任何爵士乐?
编辑:
我真正想要实现的是一个通用的,内置于我的应用程序,查询工具.它具有友好的,特定于域的GUI,并允许非技术用户创建相当复杂的查询.该工具处理搜索的版本控制,在需要的地方添加内部连接,以及一些其他特定于应用程序的东西,您将找不到典型的SQL DEV类型工具.
应用程序成功创建SQL查询.问题是我还允许用户直接输入自己的SQL.我担心潜在的SQL注入类型问题.
我不确定这是不是合适的地方; 但是,除了这个问题之外 - 如果有人能推荐一本能让我加快这种性质的甲骨文的好书 - 我会非常感激.
一种解决方案是GRANT仅为您的用户SELECT授予权限,如果这是用户被授权执行的唯一操作.
请参阅" Oracle数据库安全指南:权限简介 "
但是,我认为您的应用程序不一定是安全的,因为您将查询限制为SELECT.当您允许不安全地使用SELECT查询时,可能存在恶作剧的示例.
你澄清的问题:我已经研究过SQL注入并写了很多.我可以建议的一般规则是:永远不要将用户输入作为代码执行. 这就是SQL注入的方式.
您可以设计特定于域的语言并将用户输入映射到SQL操作,但要确保有一个层将用户选择转换为数据库模式.如果通过引入映射层将用户输入与SQL代码分开,那么您应该没问题.
另请参阅我对" 如何保护此函数不受sql注入 "的回答.