Грант SELECT на нескольких столах oracle

У меня есть 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 запрос?

Спасибо

Ответ 1

Нет. Поскольку документация показывает, вы можете предоставлять доступ только к одному объекту за раз.

Ответ 2

Вы можете сделать это с помощью динамического запроса, просто запустите следующий 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'

а затем выполните результат.

Ответ 3

мое предложение... создать роль в оракуле, используя

create role <role_name>;

затем назначьте привилегии этой роли с помощью

grant select on <table_name> to <role_name>;

затем назначьте эту группу привилегий с помощью этой роли любому пользователю, используя

grant  <role_name> to <user_name>...;

Ответ 4

Это работало для меня в моей базе данных 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, если вам не нужны дополнительные шаги для копирования/вставки.

Ответ 5

Если вы хотите предоставить обе таблицы и представления, попробуйте:

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_%';

Скопируйте результаты и выполните.