【问题标题】:How to disable PL/SQL in Oracle queries如何在 Oracle 查询中禁用 PL/SQL
【发布时间】:2023-03-07 05:32:02
【问题描述】:

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

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

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

更新

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

【问题讨论】:

  • 我假设这是一个 prod 服务器,因为那是相当有限的?
  • @Ben 的限制对我来说很好,但是是的,这是一个“各种各样的”产品服务器。这是一个我想保持和运行的服务器,就像它是生产一样,但它是一个你可以说它始终处于积极“开发”状态的服务器。如果您愿意,它几乎是一个“生产”开发服务器。
  • 那么邪恶的笛卡尔连接呢,你想禁用所有连接吗?我认为分离 prod 和 dev 实例,并进行代码审查可能是一个更好的开始。
  • @tbone - 我也知道这种风险。我不想禁用所有连接,但我确实计划采取措施通过限制资源利用率来缓解这种情况。不幸的是,您将 prod 与 dev 分开的建议(虽然通常很简单)不适用于我的情况。

标签: sql oracle jdbc plsql oracle11g


【解决方案1】:

您不能阻止人们针对您的服务器编写过程 PL/SQL 代码。但是,根据您要解决的问题的确切性质,您可能还有其他选择。浮现在脑海中的两个选项...

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

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

【讨论】:

  • 我也很害怕。我实际上已经在使用配置文件的 CPU_PER_CALL 资源限制(设置为 3),但这似乎并没有阻止上述示例查询与进程挂钩并无限期地运行。所以,这似乎是一个真正的问题。
  • 我想我应该提一下,这是 Oracle 11g XE - 也许 Express 版本不强制执行此配置文件限制?我还尝试在此配置文件下运行一些巨大的交叉连接,并且它不会在三秒后停止运行。
  • 资源管理器似乎只适用于Oracle企业版。
  • @JakeFeasel - RESOURCE_LIMIT 初始化参数设置为什么?需要将其设置为 TRUE 才能强制执行配置文件中的资源限制。
  • 太棒了!谢谢你的提示!这正是我所需要的。
猜你喜欢
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多