Можно ли использовать GRANT внутри процедуры Oracle Store? - PullRequest
4 голосов
/ 22 марта 2011

При попытке поместить оператор GRANT в хранимую процедуру Oracle 11 он сообщает, что GRANT является неожиданным символом.Нужно ли что-то делать перед GRANT или Oracle просто запрещает запуск GRANTS внутри SP?

Ответы [ 2 ]

4 голосов
/ 22 марта 2011

Это плохая идея использовать DDL (например, GRANT) внутри хранимых процедур.

Для этого вам придется использовать динамический SQL (EXECUTE IMMEDIATE), но, честно говоря, я не понимаю, зачем вам это делать внутри хранимого процесса.

2 голосов
/ 21 января 2013

Вот хранимая процедура PL / SQL, которая предоставляет объектные привилегии (SELECT, UPDATE и т. Д.) Для всех таблиц, принадлежащих текущему пользователю другому пользователю, например - «appuser».

CREATE OR REPLACE PROCEDURE grant_privs
IS
   CURSOR ut_cur IS SELECT table_name from user_tables;
   ut_rec ut_cur%rowtype;
BEGIN
   FOR ut_rec IN ut_cur
   LOOP
      EXECUTE IMMEDIATE 'GRANT ALL ON ' || ut_rec.table_name || ' TO appuser';
   END LOOP;
END;
/

Он был выполнен автоматически после развертывания изменений базы данных для веб-приложения.Текущий пользователь владеет таблицами базы данных.После развертывания любых изменений в базе данных хранимая процедура была выполнена, чтобы гарантировать, что «appuser» сможет выполнять операторы SQL для всех таблиц.По соображениям безопасности веб-приложение подключено как «appuser», которое имеет только ограниченные системные привилегии.

Это и решение проблемы, и солидный вариант использования решения.

...