【问题标题】:Quoting identifiers for dynamic SQL in PL/SQL在 PL/SQL 中引用动态 SQL 的标识符
【发布时间】:2010-10-22 18:44:45
【问题描述】:

是否有 PL/SQL 函数或通用技术来引用非限定标识符(例如,mytable)以用于动态构造的 SQL 查询?部分或完全限定标识符 (a.b@c) 怎么样?

考虑这个人为的例子:

CREATE PROCEDURE by_the_numbers(COL_NAME VARCHAR, INTVAL INTEGER) IS
  ...
BEGIN
  -- COL_NAME is interpolated into SQL string
  -- INTVAL gets bound to :1
  stmt := 'SELECT * FROM tbl WHERE ' || COL_NAME || ' = :1';
  ...
END

...我们不希望在 COL_NAME 中允许幼稚 SQL 注入(例如,值 '1=1 或 1')。

【问题讨论】:

  • 有你想要做什么的例子吗?
  • @OMG Ponies,这个例子说明了吗?基本上我想要一个相当于 perl DBI 的 quote_identifier()
  • 我的经验是不能使用 BIND 变量作为列名,因为它是 CHAR/VARCHAR 会自动用单引号括起来以防止 SQL 注入。
  • @OMG,对。标识符必须是插值(或多或少),所以我想在这样做之前引用它...

标签: oracle plsql dynamic-sql


【解决方案1】:

有 dbms_assert:http://www.oracle-base.com/articles/10g/dbms_assert_10gR2.php 用于防止 sql 注入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2014-01-06
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多