如何在Oracle查询中禁用PL/SQL

Jak*_*sel 3 sql oracle plsql jdbc oracle11g

这是我想阻止在我的服务器上运行的那种查询的示例:

begin
  While True
  LOOP
     dbms_output.put_line('tst');
  END LOOP;
end
Run Code Online (Sandbox Code Playgroud)

此查询(或其他类似的查询)可能通过Oracle JDBC瘦驱动程序访问我的Oracle服务器.我愿意阻止此查询在JDBC配置级别,数据库服务器配置级别或通过架构中的用户权限运行.我希望用户能够继续运行正常的select/insert/update/delete查询.老实说,如果没有PL/SQL类型命令可用,我会很高兴,而只是标准SQL.

更新

我还要提一下,我希望用户能够继续在SQL查询中使用标准函数.我真的不希望他们做任何看起来像程序编程的事情(并且不得不担心这些事情的陷阱,如上所示).

Jus*_*ave 7

您无法阻止人们针对您的服务器编写程序性PL/SQL代码.但是,根据您尝试解决的问题的确切性质,您可能还有其他选择.两个选项让人想起......

您可以创建与数据库用户关联的配置文件,以强制执行各种资源限制.因此,您可以限制单个调用可以消耗的CPU量或它可以执行的读取次数.这使您可以自动终止执行类似无限循环编码的会话.请注意,RESOURCE_LIMIT初始化参数需要设置为TRUE,以便Oracle在配置文件中强制执行资源限制.

您可以使用Oracle Resource Manager来优先访问资源,以降低开发人员的错误将占用服务器上所有可用资源并使重要生产流程匮乏的风险.