Ответ 1
Нет. Поскольку документация показывает, вы можете предоставлять доступ только к одному объекту за раз.
У меня есть 3 таблицы table1, table2, table3. Я хочу предоставить (выберите, например) эти таблицы для пользователя user1.
Я знаю, что могу предоставить:
grant select on table1 to user1;
grant select on table2 to user1;
grant select on table3 to user1;
Могу ли я предоставить 3 таблицы пользователю1, используя только 1 запрос?
Спасибо
Нет. Поскольку документация показывает, вы можете предоставлять доступ только к одному объекту за раз.
Вы можете сделать это с помощью динамического запроса, просто запустите следующий script в pl-sql или sqlplus:
select 'grant select on user_name_owner.'||table_name|| 'to user_name1 ;' from dba_tables t where t.owner='user_name_owner'
а затем выполните результат.
мое предложение... создать роль в оракуле, используя
create role <role_name>;
затем назначьте привилегии этой роли с помощью
grant select on <table_name> to <role_name>;
затем назначьте эту группу привилегий с помощью этой роли любому пользователю, используя
grant <role_name> to <user_name>...;
Это работало для меня в моей базе данных Oracle:
SELECT 'GRANT SELECT, insert, update, delete ON mySchema.' || TABLE_NAME || ' to myUser;'
FROM user_tables
where table_name like 'myTblPrefix%'
Затем скопируйте результаты, вставьте их в свой редактор, затем запустите их как script.
Вы также можете написать script и использовать "Execute Immediate" для запуска сгенерированного SQL, если вам не нужны дополнительные шаги для копирования/вставки.
Если вы хотите предоставить обе таблицы и представления, попробуйте:
SELECT DISTINCT
|| OWNER
|| '.'
|| TABLE_NAME
|| ' to db_user;'
FROM
ALL_TAB_COLS
WHERE
TABLE_NAME LIKE 'TABLE_NAME_%';
Для просмотра просто попробуйте:
SELECT
'grant select on '
|| OWNER
|| '.'
|| VIEW_NAME
|| ' to REPORT_DW;'
FROM
ALL_VIEWS
WHERE
VIEW_NAME LIKE 'VIEW_NAME_%';
Скопируйте результаты и выполните.