Блок SQL-инъекции Oracle с DBMS_ASSERT

Этот код запускает ошибки

  query_string:= 'SELECT '||dbms_assert.sql_object_name(trim(оба '' из return_field))|| 
                   ' FROM '||dbms_assert.schema_name(trim(оба '' из from_schema))||
                        '.'||dbms_assert.sql_object_name(trim(оба '' из from_table))||  
                  ' WHERE '||dbms_assert.sql_object_name(key_field) || ' = '||key_value;



 EXECUTE IMMEDIATE query_string в return_result;

неверный объект sql.

из документации я чувствую, что любой объект в таблице является объектом SQL??
что здесь не так?

рассмотрим следующую функцию в оракуле 10g

Рассмотрим следующую функцию в контексте 10g

    СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ scott.tab_lookup (ключевое поле CHAR, ключевое_значение CHAR,
                                       from_schema CHAR,
                                       from_table CHAR, возвращаемое поле CHAR, возвращаемый_тип CHAR)
    RETURN VARCHAR2 IS
    result_a varchar2(1000);
    query_string VARCHAR2(4000);

    /* версия 0.5*/
    BEGIN

    query_string:= 'SELECT '||dbms_assert.qualified_sql_name(trim(from_table||'.'||return_field))|| 
                       ' FROM '||dbms_assert.schema_name(trim(from_schema))||
                            '' || dbms_assert.sql_object_name (дифферент (from_table))||  
                      ' WHERE '||dbms_assert.qualified_sql_name(from_table||'.'||key_field) || ' = '||key_value;

      IF(return_type = 'SQL') THEN
         result_a:= query_string;
      ELSE
         EXECUTE IMMEDIATE query_string 
         --USING key_value в result_a;
      END IF; ВОЗВРАТ (результат_а); ИСКЛЮЧЕНИЕ, КОГДА NO_DATA_FOUND THEN 
           RETURN(NULL); КОГДА TOO_MANY_ROWS THEN 
           RETURN('**ERR_DUPLICATE**'); КОГДА ДРУГОЙ THEN 
    /*
    ORA-44001   INVALID_SCHEMA_NAME 
    ORA-44002   INVALID_OBJECT_NAME
    ORA-44003   INVALID_SQL_NAME
    ORA-44004   INVALID_QUALIFIED_SQL_NAME
    */
        IF    SQLCODE = -44001 THEN 
              RETURN(* SEN RETURN) ELSIF SQLCODE = -44002 THEN 
              RETURN('*ERR_INVALID_OBJECT*');
        ELSIF SQLCODE = -44003 THEN 
              RETURN('*ERR_INVALID_SQL_NAME*');
        ELSIF SQLCODE = -44004 THEN 
              RETURN('*ERR_INVALID_QALIFIED_SQLNAME*'); конец если;         
        return ('*ERR_'||sqlcode); КОНЕЦ; /

я получаю ERR_INVALID_OBJECT

- получить Генерированный SQL как Значение  

    Выберите scott.tab_lookup('ID',1,'TEST','TEST_TABLE','TEST_DESC','SQL') из двойного;

-- -или же-

- получить значение, возвращаемое из поля базы данных

    Выберите scott.tab_lookup('ID',1,'TEST','TEST_TABLE','TEST_DESC','') из двойного;

мой стол похож

    test_table  
    ====================
    ID, TEST_DESC
    ====================
    "11", "ТЕСТ 1"
    "12", "ТЕСТ 5000"
    "13", "ЗНАЧЕНИЕ ВХОДА ТЕСТА"
    "14", "JUNK VALUE"
    "50", "ТЕСТ ЗНАЧЕНИЕ 50"

эта таблица находится в схеме 'TEST', и я связан со SCOTT, и у SCOTT есть 'GRANT SELECT на TEST.TEST_TABLE to scott'

все еще я получаю ошибку

ERR_INVALID_OBJECT

1 ответ

Решение
query_string := 'SELECT '||dbms_assert.qualified_sql_name(trim(from_schema||'.'||from_table||'.'||return_field))|| 
                   ' FROM '||dbms_assert.schema_name(trim(from_schema))||
                        '.'||dbms_assert.sql_object_name(trim(from_table))||  
                  ' WHERE '||dbms_assert.qualified_sql_name(from_schema||'.'||from_table||'.'||key_field) || ' = '||key_value;



 EXECUTE IMMEDIATE query_string into return_result;

Из документов..

  • ENQUOTE_LITERAL - заключает в кавычки строковый литерал
  • ENQUOTE_NAME - заключает имя в двойные кавычки
  • NOOP - возвращает значение без проверки
  • QUALIFIED_SQL_NAME - проверяет, является ли входная строка квалифицированным именем SQL
  • SCHEMA_NAME - Функция Проверяет, что входная строка является именем существующей схемы
  • SIMPLE_SQL_NAME - проверяет, является ли входная строка простым именем SQL
  • SQL_OBJECT_NAME - проверяет, является ли строка входного параметра квалифицированным идентификатором SQL существующего объекта SQL
Другие вопросы по тегам