Как я могу предоставить привилегии только для просмотра всем пакетам и процедурам в Oracle?

#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 с правами определителя, а использует права вызывающего, которые зависят от индивидуальных прав пользователя на объекты, на которые ссылаются в коде.

Смотрите эти ссылки для получения дополнительной информации о правах определителя и вызывающего и о том, как ими управлять: