【问题标题】:Grant select on any table/view on the schema在架构上的任何表/视图上授予选择
【发布时间】:2016-08-17 23:49:18
【问题描述】:

如果我在 oracle 中创建用户/模式 FOO,然后在模式 FOO 上创建一堆表,

有没有办法在创建表/视图之前给用户 FOO 授权选择所有表/视图? 或者我必须在创建表/视图后才这样做?

CREATE USER FOO ....
/
*** GRANT SELECT TO USER FOO ON ANY TABLE/VIEW CREATED
/
CREATE TABLE 1    ...
/
CREATE TABLE ...   ...
/
CREATE TABLE N     ...
/

【问题讨论】:

  • 用户foo 将始终能够查询foo 架构中的对象。 foo 拥有这些对象,因此 foo 可以删除它们、更改它们、查询它们等。您可能的意思是您希望用户 bar 有权访问 foo 架构中的所有对象?跨度>
  • 很好 - 我错过了。

标签: sql oracle


【解决方案1】:

您要的是grant select on <schema_name> to <user_name>。今天这样的事情是不存在的。在 OTN(Oracle 技术网)上有一个关于这个问题的公开请求/用户投票,目前处于活动状态:

https://community.oracle.com/ideas/2333

如果需要,您可以在同一个地方找到解决方法的想法。

【讨论】:

  • 我记得有一个技巧可以创建一个角色,然后将用户分配给该角色然后创建表,但我不记得如何
  • 您可以创建一个角色来简化您的生活,但您仍然无法将架构上的选择授予该角色。事后您仍将授予表访问权限,但仅授予一个角色而不是单个用户。
【解决方案2】:

不完全是您想要的,但您可以使用动态 sql 为架构的所有表授予 select(或任何其他)权限:

begin
  for i in (
            select 'grant select on ' || table_name || ' to USER2' as stm
            from dba_tables
            where owner = 'USER1'
            )
  loop
    execute immediate i.stm;
  end loop;
end;

这与您的要求略有不同,因为您只能在创建所有表之后才能执行此操作;但是,它是一段简单的 SQL,您可以在每次创建表后运行它,以确保您的用户被完全授予。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-10
    • 2019-04-13
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多