#sql #oracle #stored-procedures
#sql #Oracle #хранимые процедуры
Вопрос:
Я хотел бы предоставить readonly
привилегии всем пакетам, которые у меня есть, Oracle
но не уверен, как это сделать.
У меня есть следующая команда, которая предоставляет привилегию выбора одному из пользователей в таблице.
grant select on scott.dept to app_user_ro;
У меня есть куча packages
, в которой содержится много stored procedures
.
Возможно ли предоставить read only
привилегии всем этим packages
? Если да, то это правильная команда для этого?
grant select on scott.dept_package.* to app_user_ro;
grant select on scott.employee_package.* to app_user_ro;
..
..
some more here
Есть ли способ предоставить read only
привилегии всем пакетам за один раз?
Комментарии:
1. Неясно, что вы имеете в виду, когда говорите «доступно только для чтения в пакете». Что вы ожидаете, что получатель этой привилегии увидит или сделает?
2. Пользователь с правами на выполнение в пакете сможет делать все, что делает код пакета. Нет опции «только для чтения», кроме как изначально записать пакет, содержащий только код «только для чтения», и вы не можете предоставлять разные привилегии различным функциям или процедурам в пакете.
Ответ №1:
Пользователю могут быть предоставлены права «ВЫПОЛНИТЬ» только для пакета целиком:
grant execute on scott.dept_package to app_user_ro;
После предоставления права пользователь с правами на выполнение в пакете сможет делать все, что делает код пакета. Если в пакете есть процедуры с правами определителя (по умолчанию), которые вставляют, обновляют или удаляют строки в таблице, тогда пользователь сможет выполнять эти действия через пакет независимо от их индивидуальных привилегий в таблицах приложений.
Нет опции «только для чтения», кроме как изначально записать пакет, содержащий только код «только для чтения». Вы должны убедиться, что код пакета не содержит кода DML с правами определителя, а использует права вызывающего, которые зависят от индивидуальных прав пользователя на объекты, на которые ссылаются в коде.
Смотрите эти ссылки для получения дополнительной информации о правах определителя и вызывающего и о том, как ими управлять: