这是我想阻止在服务器上运行的那种查询的示例:
begin While True LOOP dbms_output.put_line('tst'); END LOOP; end
该查询(或其他类似查询)可能通过Oracle JDBC瘦驱动程序访问了我的Oracle服务器。我愿意阻止该查询在JDBC配置级别,数据库服务器配置级别或通过架构内的用户权限运行。我希望用户能够继续运行正常的选择/插入/更新/删除查询。老实说,如果没有可用的PL/ SQL类型命令,而只有标准SQL,我会很高兴。
更新
我还应该提到,我希望用户能够继续在其SQL查询中使用标准函数。我只是真的不希望他们做任何看起来像过程编程的事情(并且不必担心这些事情的陷阱,如上所示)。
您不能阻止人们针对您的服务器编写过程性PL / SQL代码。但是,根据您要解决的问题的确切性质,您可能还有其他选择。想到两个选择…
您可以创建与数据库用户关联的配置文件,以强制执行各种资源限制。因此,您可以限制单个调用可以消耗的CPU数量或可以进行的读取次数。这样一来,您就可以自动终止执行诸如对无限循环进行编码之类的会话。请注意,RESOURCE_LIMIT为了使Oracle强制执行配置文件中的资源限制,需要将初始化参数设置为TRUE。
RESOURCE_LIMIT
您可以使用Oracle Resource Manager优先安排对资源的访问,以减少开发人员的错误将占用服务器上所有可用资源并使重要的生产流程饿死的风险。