J'ai 3 tables table1, table2, table3 ..__ Je veux accorder (sélectionner par exemple) ces tables à un utilisateur, utilisateur1.
Je sais que je peux accorder avec:
grant select on table1 to user1;
grant select on table2 to user1;
grant select on table3 to user1;
Puis-je accorder les 3 tables à user1 en utilisant une seule requête?
Merci
Vous pouvez le faire avec une requête dynamique, il suffit d’exécuter le script suivant dans pl-sql ou sqlplus:
select 'grant select on user_name_owner.'||table_name|| 'to user_name1 ;' from dba_tables t where t.owner='user_name_owner'
puis exécutez result.
ma suggestion est ... créer un rôle dans Oracle en utilisant
create role <role_name>;
puis attribuer des privilèges à ce rôle en utilisant
grant select on <table_name> to <role_name>;
puis attribuez ce groupe de privilèges via ce rôle à n’importe quel utilisateur en utilisant
grant <role_name> to <user_name>...;
Si vous souhaitez accorder aux deux tables et vues, essayez:
SELECT DISTINCT
|| OWNER
|| '.'
|| TABLE_NAME
|| ' to db_user;'
FROM
ALL_TAB_COLS
WHERE
TABLE_NAME LIKE 'TABLE_NAME_%';
Pour seulement des vues, essayez:
SELECT
'grant select on '
|| OWNER
|| '.'
|| VIEW_NAME
|| ' to REPORT_DW;'
FROM
ALL_VIEWS
WHERE
VIEW_NAME LIKE 'VIEW_NAME_%';
Copier les résultats et les exécuter.
Cela a fonctionné pour moi sur ma base de données Oracle:
SELECT 'GRANT SELECT, insert, update, delete ON mySchema.' || TABLE_NAME || ' to myUser;'
FROM user_tables
where table_name like 'myTblPrefix%'
Copiez ensuite les résultats, collez-les dans votre éditeur, puis exécutez-les comme un script.
Vous pouvez également écrire un script et utiliser "Exécuter immédiatement" pour exécuter le code SQL généré si vous ne souhaitez pas utiliser les étapes supplémentaires copier/coller.