是否有可能一个用户在另一个用户的模式中创建一个表并拥有其模式的所有权限?

时间:2017-05-11 16:00:15

标签: oracle oracle11g

我有两个用户,USER1和USER2。我想这样做:

  1. 为USER1架构的USER2授予所有权限。 USER2可以在USER1架构

  2. 中创建表,插入,更新,删除,删除等
  3. 当USER2创建表,视图等时,在USER1的架构中创建。

  4. 创建新用户,例如USER3,USER2可以向USER1的架构授予所有权限,例如USER2必须具有USER1架构的权限。

  5. 我可以做到这一点,如果有可能,我该怎么做?

    我找到了一些答案Grant permission from one user to another in Oracle

    但是没有解释如何为所有表创建ROLE,而是逐步向表中授予select权限。当USER2有100个表时,有一种方法可以一步完成,为当前处于USER2模式的所有表以及USER2将创建的未来表授予select权限。有可能管理这个吗?

1 个答案:

答案 0 :(得分:1)

代替实际授予从一个用户到另一个用户的所有内容,代理连接可能非常适合您。

使用代理连接,您实际上可以在不知道密码的情况下以其他人身份登录。这允许您假设该用户的身份,以便您可以保证他们可以做的任何事情,您可以作为他们的代理。

此外,它还将其架构设置为架构,以便您创建的任何未使用架构名称限定的对象都在其架构中创建,而不是您的架构。

当然,缺点是,由于您成为代理用户,您将失去自己对该连接的授权。

sqlplus / as sysdba

alter user user1 grant connect through user2;
exit;

sqlplus user2[user1]
password: <Type in the password for user2>    

show user;
--------
USER1

create view mydual as select * from dual;

select owner from all_views where view_name = 'MYDUAL';
--------
USER1

在SQLDeveloper(4.1.5)中,您可以通过以下方式为连接指定代理连接:

1)按“高级”按钮

2)检查代理连接框

3)在“代理客户端”对话框中键入要代理的用户名

4)将代理密码保留为空

5)按OK

6)使用连接

有点旧,但AskTom有一篇关于代理连接的好文章。