Усечение таблицы привилегий без хранимых процедур - PullRequest
1 голос
/ 22 октября 2019

SYSTEM создает несколько таблиц и хочет предоставить пользователю A возможность усекать таблицы. На документах oracle минимальная привилегия составляет:

GRANT DROP ANY TABLE TO userA

https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10007.htm#SQLRF01707

DROP ANY TABLE, как указано, слишком мощная привилегия для предоставления пользователю, и от просмотра тамнет способа ограничить таблицы, которые пользователь может усекать с ним.

Правильный способ, о котором говорилось в предыдущих темах, - это использовать хранимые процедуры:

CREATE OR REPLACE procedure truncateTables
AS
BEGIN
execute immediate 'TRUNCATE TABLE table1';
end;
/

GRANT EXECUTE on system.truncateTables TO userA;

Однако, если я хочувообще избегать использования каких-либо хранимых процедур, есть ли альтернативный способ, позволяющий пользователю, который не является владельцем таблицы, обрезать таблицы, но не с привилегией, которая потенциально разрушительна, как "DROP ANY TABLE"?

1 Ответ

0 голосов
/ 22 октября 2019

Вы не можете сделать это без процедуры.

вы можете сделать это динамически следующим образом:

CREATE OR REPLACE procedure pr_truncate_table(p_table_name varchar2) is
begin

     execute immediate 'truncate table ' || p_table_name || '';


 end;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...