ВСТАВИТЬ КАК ВЫБРАТЬ в пакет, где таблица имеет редактирование

Я отредактировал столбцы в таблице. Когда разработчик пытается использовать команду INSERT AS SELECT в пакете, он получает:

ORA-28081: Недостаточно прав - команда ссылается на отредактированный объект.

Что я могу сделать, кроме предоставления исключения для схемы (полностью отказавшись от использования редактирования)?

Разработчики используют пакет, но не должны видеть содержимое таблицы

Вот функция:

FUNCTION Create****Transaction (******PackageUserId NUMBER)
   return NUMBER
   IS
   /*****************************
      Local Variable Definitions
   ******************************/
   v_****tId NUMBER(15);


   BEGIN
        v_****Id := ***_PKG.GETNEXTAMSSEQNUM();

        INSERT INTO ****_AGENCY_PACK_USER_TRANS ****
        (
         ****_ID,
         ****_****_ID,
         ****_BUS_ID,
         ****_ROLE_ID,
         ****_DATE_FROM,
         ****_DATE_TO,
         ****_ABBR,
         ****_NOTE,
         ****_CREATED_BY,
         ****_DATE_CREATED,
         ****_AUDIT_ACTION,
         ****_AUDIT_DATE,
         ****_AUDIT_LOCATION,
         ****_AUDIT_USER,
         ****_VER_NUM,
             ****_AMSS_ID,
             ****_WEBSERVICE,
         ****_APR_ID,
             ****_ASSIGN_RULE_ALLOWED,
         ****_SUP_TAG,
         ****_CPR
         )
        (
        select
           v_****Id,
         ****_ID,
         ****_BUS_ID,
         ****_ROLE_ID,
         ****_DATE_FROM,
         ****_DATE_TO,
         ****_ABBR,
         ****_NOTE,    (THIS IS REDACTED ON THE TABLE)
                 ****_CREATED_BY,
         ****_DATE_CREATED,
         ****_AUDIT_ACTION,
         ****_AUDIT_DATE,
         ****_AUDIT_LOCATION,
         ****_AUDIT_USER,
         ****_VER_NUM,
             ****_AMSS_ID,
             ****_WEBSERVICE,
         ****_APR_ID,
             ****_ASSIGN_RULE_ALLOWED,
             ****_SUP_TAG,
             ****_CPR
        FROM
                  ***********_PACKAGE_USERS
        WHERE ****_ID = *****PackageUserId
        );

        if SQL%ROWCOUNT = 0 THEN
           dbms_output.put_line('ERROR - no rows inserted!!');
           return 0;
          else
           return v_****Id;
        end if;

   END Create****ransaction;

0 ответов

Цель Redaction - убедиться, что никто, не имеющий доступа к данным, не сможет их просмотреть.

После того, как вы применили редактирование с политикой 1=1, оно будет применимо для всех пользователей, кроме SYS, и не разрешит CTAS или вставку по выбору. Есть обходной путь или, можно сказать, другой способ предоставления доступа законным пользователям.

Дайте мне знать, если вам понадобится более подробная информация об этом.

Другие вопросы по тегам