2010-03-04 3 views

ответ

5

Невозможно сделать. В Oracle привилегии предоставляются на определенных объектах, если только у вас нет привилегированных прав доступа, которые предоставляют доступ к любому объекту в любой схеме.

Это одна из тех вещей, которые кажутся довольно раздражающими, но на самом деле довольно просты. Не существует хорошей бизнес-причины для предоставления прав на все объекты в схеме в массовом порядке. Либо

  1. второй схема действительно потребность только подмножество privilges на суб-наборе объектов; или
  2. Вторая схема совершенно не нужна.

Теперь может случиться так, что подмножество в первом случае является очень большим подмножеством. Но лень не является оправданием для плохой практики безопасности.

Что мы можем сделать, это генерировать операторы грантов из словаря данных:

select 'grant select on '||table_name||' to B' 
from user_tables 
/

(для сценария для запуска пользователем А).

Это все же лучше, чем предоставление прав на схему, поскольку это означает, что любой новый объект, добавленный пользователем A, не будет автоматически передаваться в B без дополнительного действия и, следовательно, без каких-либо дополнительных соображений относительно того, Уместно.

+0

Если кто-то должен был создать триггер DDL, который автоматически предоставит соответствующие привилегии роли. Это может предоставить схемы-подобные гранты, которые не редкость в других СУБД. –

2

Вы можете использовать PROXY user. Это не то же самое, что позволяет одному пользователю базы данных подключаться как другому, но с использованием собственного пароля. Таким образом, у вас может быть несколько пользователей, каждый со своим собственным паролем, используя ту же схему.

Примером кода является here.

Смежные вопросы