предоставьте привилегию усечения другому пользователю в Oracle

#oracle #stored-procedures #database-administration #truncate #grant

Вопрос:

Я создал приведенную ниже Oracle процедуру, в которой я предоставляю привилегии DML для всех таблиц TST пользователю. Теперь я также хочу предоставить Truncate привилегии TST пользователю в той же процедуре, но не знаю, как это сделать.

 CREATE OR REPLACE PROCEDURE "TBL_MER"."PROCEDURE_GRANT_PRIV"
IS
    BEGIN

    FOR tab IN (SELECT table_name
            FROM   all_tables
            where owner = USER
            order by table_name) LOOP
          EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE, DELETE ON '||tab.table_name||' TO TST';          
      END LOOP;
      COMMIT;
   END;
 

Ответ №1:

Вы читали документацию по команде УСЕЧЕНИЯ?

Цитата из справочника по языку SQL 19c

Предпосылки

Чтобы усечь таблицу, таблица должна быть в вашей схеме, или у вас должны быть системные права «УДАЛИТЬ ЛЮБУЮ таблицу».

УСЕЧЕНИЕ — это не DML.

Комментарии:

1. у меня уже есть эта привилегия, и да, Усечение-это не DML, но я хочу использовать усечение также в той же процедуре..

2. «но я хочу использовать tuncate также в той же процедуре» . Я не уверен, о чем вы спрашиваете.. вы хотите предоставить эту привилегию или вы действительно хотите сократить таблицу? Если последнее, то зачем вам это делать — в процедуре, которая в противном случае только предоставляет привилегии? Если первое — вы просто хотите предоставить привилегию, затем добавьте необходимое заявление о ПРЕДОСТАВЛЕНИИ, я не вижу трудностей. Но тогда я бы не использовал хранимую процедуру для выполнения всего лишь одноразовой операции. Просто используйте sql для создания sql-скрипта. Проверьте вменяемость полученного скрипта; выполните его.

3. да, я понял это сейчас…не могли бы вы также, пожалуйста, привести в ответ пример одной операции …

4. Ну, я не знаю, что это у тебя»есть». Я указал на два противоречивых требования и попросил разъяснений, которые вы не предоставили. Я также указал, что вам нужно только добавить еще одну команду в свою процедуру, в зависимости от того, какое из двух конфликтующих требований вам нужно. Конечно, вы можете добавить простую команду ПРЕДОСТАВЛЕНИЯ или УСЕЧЕНИЯ . . . .

5. да, я уже добавил еще одну команду в процедуру, и теперь она работает..