我有 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 吗?
谢谢
不可以。如文档所示,您一次只能授予对一个对象的访问权限。
您可以使用动态查询来做到这一点,只需在 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'
然后执行结果。
我的建议是......使用在 oracle 中创建角色
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%'
然后,复制结果,将它们粘贴到您的编辑器中,然后像脚本一样运行它们。
如果您不想要额外的复制/粘贴步骤,您也可以编写一个脚本并使用“立即执行”来运行生成的 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_%';
复制结果并执行。