我有3个表table1,table2,table3。 我想将这些表授予(例如选择)给用户user1。
我知道我可以批准:
grant select on table1 to user1;
grant select on table2 to user1;
grant select on table3 to user1;
我是否可以仅使用1个查询将3个表授予user1?
由于
答案 0 :(得分:15)
没有。作为documentation shows,您一次只能授予对一个对象的访问权限。
答案 1 :(得分:8)
您可以使用动态查询来执行此操作,只需在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'
然后执行结果。
答案 2 :(得分:5)
我的建议是......使用
在oracle中创建角色create role <role_name>;
然后使用
为该角色分配权限grant select on <table_name> to <role_name>;
然后使用
通过该角色将该组权限分配给任何用户grant <role_name> to <user_name>...;
答案 3 :(得分:0)
这对我的Oracle数据库起作用了:
SELECT 'GRANT SELECT, insert, update, delete ON mySchema.' || TABLE_NAME || ' to myUser;'
FROM user_tables
where table_name like 'myTblPrefix%'
然后,复制结果,将它们粘贴到编辑器中,然后像脚本一样运行它们。
如果您不想要额外的复制/粘贴步骤,您也可以编写脚本并使用“Execute Immediate”运行生成的SQL。
答案 4 :(得分:0)
如果您想同时授予表和视图,请尝试:
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_%';
复制结果并执行。