23

我有 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 吗?

谢谢

4

5 回答 5

24

不可以。如文档所示,您一次只能授予对一个对象的访问权限。

于 2013-03-16T16:39:32.813 回答
9

您可以使用动态查询来做到这一点,只需在 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'

然后执行结果。

于 2013-11-12T08:46:24.397 回答
5

我的建议是......使用在 oracle 中创建角色

create role <role_name>;

然后使用

grant select on <table_name> to <role_name>;

然后使用该角色将该组权限分配给任何用户

grant  <role_name> to <user_name>...;
于 2013-03-16T18:00:48.710 回答
0

这对我的 Oracle 数据库有用:

SELECT   'GRANT SELECT, insert, update, delete ON mySchema.' || TABLE_NAME || ' to myUser;'
FROM     user_tables
where table_name like 'myTblPrefix%'

然后,复制结果,将它们粘贴到您的编辑器中,然后像脚本一样运行它们。

如果您不想要额外的复制/粘贴步骤,您也可以编写一个脚本并使用“立即执行”来运行生成的 SQL。

于 2017-12-21T15:53:58.377 回答
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_%';

复制结果并执行。

于 2018-12-10T15:09:29.077 回答