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

标签 sql oracle jdbc plsql oracle11g

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

begin
  While True
  LOOP
     dbms_output.put_line('tst');
  END LOOP;
end

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

更新

我还应该提到,我希望用户能够继续在他们的 SQL 查询中使用标准函数。我只是真的不希望他们做任何看起来像过程编程的事情(并且不得不担心这些事情的陷阱,如上所述)。

最佳答案

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

您可以 create a profile与实现各种资源限制的数据库用户相关联。因此,您可以限制单个调用可以消耗的 CPU 数量或它可以执行的读取次数。这使您可以自动终止执行某些操作(例如编写无限循环代码)的 session 。请注意,RESOURCE_LIMIT 初始化参数需要设置为 TRUE,以便 Oracle 在配置文件中强制实现资源限制。

您可以使用 Oracle Resource Manager确定资源访问的优先级,以降低开发人员的错误会占用服务器上所有可用资源并使重要的生产流程处于饥饿状态的风险。

关于sql - 如何在 Oracle 查询中禁用 PL/SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9182315/

相关文章:

mysql - 仅选择存在的列

sql - 在oracle SQL查询中使用字符串包含函数

database - 如何将 Airflow 连接到 oracle 数据库

java - 关闭便利类中的连接

mysql - Spring boot 多数据源连接中的 JDBCConnectionException

sql - 开仓、平仓按日期sql查询

sql - HSQLDB中WHERE和ORDER BY的性能问题

MySQL查询结果及顺序

sql - 在Oracle SQL表中更新日期

java - Oracle PoolDataSource 在 commit() 之前让 DB 游标保持打开状态,这是预期的行为吗?